所以我正在为iOS制作货币追踪器ap。目前,我已设法提取跟踪器的API,并在我的Main.storyboard上将其作为好标签呈现。当我尝试运行我的应用程序时,我获得了最新的货币价值,但在几分钟后新数据无法刷新。我的问题是我如何每分钟左右刷新一次应用程序,因此用户始终可以使用货币值进行更新。
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()
}
}
非常感谢
答案 0 :(得分:3)
假设您每次加载视图控制器时都想从API中获取值(当应用程序启动时,当应用程序从后台恢复时),您应该从您的viewWillAppear方法中异步调用API方法查看控制器。每次要显示视图时都会调用viewWillAppear。您还可以查看其他视图生命周期方法,以确定何时是重新加载数据的最佳时间。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
updateCurrencyDataAsync() //Your API method call
}
答案 1 :(得分: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.