2016-01-04 216 views
0

因此,我正在爲iOS創建貨幣跟蹤器。目前我已經設法提取跟蹤器的API並將其作爲我的Main.storyboard上的不錯標籤呈現。當我嘗試運行我的應用程序時,我獲得最新貨幣值,但幾分鐘後不會使用新數據自行刷新。我的問題是,如何讓應用程序每分鐘都能刷新一次,因此用戶可以始終使用貨幣值進行更新。如何自動更新應用程序iOS應用程序

override func viewDidLoad() { 
    super.viewDidLoad() 

    getJSON { (usdPrice) -> Void in 
     let usdPriceText = usdPrice.description 
     self.bitcoinValue.stringValue = usdPriceText 

     print(usdPrice) 
    } 
} 

func getJSON(completion: (Double) -> Void) { 
    let url = NSURL(string: baseURL) 
    let request = NSURLRequest(URL: url!) 
    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration()) 
    let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in 

     if error == nil{ 
      let swiftyJSON = JSON(data: data!) 
      let usdPrice = swiftyJSON["bpi"]["USD"]["rate"].doubleValue 
      completion(usdPrice) 
     } else { 
      print("There was an error!") 
     } 
    } 

    task.resume() 
    } 




} 

非常感謝

+1

歡迎來到「堆棧溢出」我很願意幫你這個問題,但首先我需要知道你在哪裏查詢這些信息。也許嘗試編輯您的帖子並插入您用於查詢信息的代碼並告訴我們它位於何處。謝謝! – Jaba

回答

1

要更新定期的數據(如每分鐘,如你所提到的),你會想使用一個NSTimer。它們允許您在每次指定的時間已過時運行一個函數。

let updateTimer = NSTimer.scheduledTimerWithTimeInterval(TIME_BETWEEN_CALLS, target: self, selector: Selector("FUNCTION"), userInfo: nil, repeats: true); 
  • TIME_BETWEEN_CALLS意味着你的更新功能的調用之間的秒數。

  • FUNCTION指定由定時器調用哪個函數。

  • 如果你想在某個時候停止自動更新,請撥打updateTimer.invalidate()

Here's some more information about timers I found to be quite useful.

+0

我的代碼在部件選擇器上應該如何顯示:選擇器(?) 感謝您的幫助 –

+0

您需要您想調用的函數的名稱。如果你有一個更新例程'func update(){}',那麼在定時器定義中,你將不得不放置'selector:Selector(「update」)' – ArdiMaster

+0

嗨。不幸的是,在時間間隔結束後,我仍然收到很大的錯誤信息。它說: '2016-01-05 00:46:36.600 Bitfo [22124:1699411] - [Bitfo.ViewController getJSON]:無法識別的選擇器發送到實例0x608000100090 2016-01-05 00:46:36.601 Bitfo [22124 :1699411] - [Bitfo.ViewController getJSON]:無法識別的選擇器發送到實例0x608000100090 2016-01-05 00:46:36.603 Bitfo [22124:1699411]' –

3

假設你想從API每次你的視圖控制器被加載時間獲取您的值(當應用程序啓動時,當應用從後臺重新開始),你應該叫您的視圖控制器上的viewWillAppear方法內的異步API方法。每當視圖即將顯示時,viewWillAppear就會被調用。您還可以查看其他視圖生命週期方法以確定何時是重新加載數據的最佳時間。

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    updateCurrencyDataAsync() //Your API method call 
}