当服务器上的数据发生更改时,cURL获取数据不会更新

时间:2016-02-14 22:54:08

标签: swift api curl background-foreground

我有一个从网站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上的数据发生更改,我的数据也不会更新。我试图关闭应用程序并再次打开它,但它仍然没有更新数据。所以我想知道是否有人可以给我一些建议。任何帮助将不胜感激!

2 个答案:

答案 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)

我终于发现它是因为我没有删除缓存。然后更改缓存策略。