2016-05-21 16 views
3

テーブルビューを読み込む前に、サーバーからデータを取得する必要があります。 dispatch_asyncを使用して、データの取得が完了した後にアプリがセルビューを更新する方法。ディスパッチキューからテーブルビューのセルを更新する方法をスムーズに

私が上記のコードに慣れたとき、私はdictAnswerがnilであるというエラーを表示します。 dictAnswerはサーバから取得されます。私はその理由は、dictAnswerがフェッチされる前にセルが更新されたためだと思います。しかし、私はどのようにdispatch_asyncを使用するのか分からない。私はいくつか私にヒントを与えることができることを願っています。 THX

答えて

5

あなたUITableViewDataSource機能はとても

var data:[String]() 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return data.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    } 

だからあなたのように、あなたの配列内の行数を参照する必要も重要ですあなたの配列が空である

func loadData() { 
    // some code to get remote data 
    self.data = result 
    dispatch_async(dispatch_get_main_queue()) { 
     tableView.reloadData() 
    } 
} 

ながら、(data.countは0を返す)のtableViewは文句を言わないロードしよう:非同期機能は、あなたが行う可能性のあるデータを取得しますスクリプト化の答えを使用した後、私はいくつかの更新をしなければならなかった、ここに戻ってそれらを投稿する良いアイデアだと思った任意の行とクラッシュ

+0

これは機能します。ご協力いただきありがとうございます –

3

これはデータをリロードする方法です。しかし、 データをリロードする前に、アレイをリフレッシュすることを忘れないでください。単にデータを取得することは重要ではないことに注意してください、リロードする前に配列にデータを更新する

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.tableView.reloadData() 
     }) 
0

...

スウィフト3

DispatchQueue.main.async(execute: {() -> Void in 
        self.tableView.reloadData() 
       }) 

および

DispatchQueue.main.async { 
    self.tableView.reloadData() 
} 
関連する問題