我有一个从网站api获取数据的功能。
func getData() {
print("getData is called")
//create authentication ... omitted
//create authentication url and request
let urlPath = "https://...";
let url = NSURL(string: urlPath)!
let request: NSMutableURLRequest = NSMutableURLRequest(URL: url)
request.setValue("Basic \(base64EncodedCredential)", forHTTPHeaderField: "Authorization")
request.HTTPMethod = "GET"
//some configuration here...
let task = session.dataTaskWithURL(url) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
let json = JSON(data: data!)
}
task.resume()
}
我能够从API获取数据,并且我有一个观察者,这样每次应用程序进入前台时,都可以再次调用getData()函数来更新数据。
override func viewDidLoad() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "willEnterForeground", name: UIApplicationWillEnterForegroundNotification, object: nil)
}
func willEnterForeground() {
print("will enter foreground")
getData()
}
我很确定当我的应用程序进入前台时,再次调用getData(),但是,即使服务器API上的数据发生更改,我的数据也不会更新。我试图关闭应用程序并再次打开它,但它仍然没有更新数据。所以我想知道是否有人可以给我一些建议。任何帮助将不胜感激!
答案 0 :(得分:0)
你需要一个完成它的闭包。这将使它能够发出请求,然后调用reload" Table View"一旦你从请求中获得了数据。这是您需要更改getData()
功能
func getData(completion: (json) -> Void)) {
print("getData is called")
//create authentication url and request
let urlPath = "https://...";
let url = NSURL(string: urlPath)!
let request: NSMutableURLRequest = NSMutableURLRequest(URL: url)
request.setValue("Basic \(base64EncodedCredential)", forHTTPHeaderField: "Authorization")
request.HTTPMethod = "GET"
//some configuration here...
let task = session.dataTaskWithURL(url) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
let json = JSON(data: data!)
}
completion(json)
}
然后您需要调整调用此函数的位置,因为您已经更改了它应该看起来更像的参数。
func willEnterForeground() {
print("will enter foreground")
getData(completion:{
self.data = json
self.tableView.reloadData()
})
}
将等到数据恢复后再重新加载视图,更新所有内容以反映服务器上的内容。
如果您有更多问题,请与我们联系。
答案 1 :(得分:0)
我终于发现它是因为我没有删除缓存。然后更改缓存策略。