0

ウェブサイトの 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 のデータが変更されてもデータは更新されません。アプリを閉じて再度開いてみましたが、それでもデータが更新されません。それで、誰かが私にいくつかの提案をしてくれるかどうか疑問に思っていました。どんな助けでも大歓迎です!

4

2 に答える 2

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()
    })
}

サーバー上の内容を反映するためにすべてのコンテンツを更新するビューをリロードする前に、データが戻るまで待機します。

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2016-02-14T23:52:04.433 に答える