2016-03-26 11 views
1

我々は、RESTコールを介してデータをロードする:スウィフトのUITableView reloadData()UIの挙動

let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 
    //Update data store…. 
    self.tableView.reloadData() 
}) 
task.resume() 

グリッド内のデータがしかし図示されていません。シミュレータのグリッドをクリックする必要があります。これを行うと、データが表示されます。 UIの操作なしでデータが自動的に読み込まれるようにするには、ここでは何が欠けていますか?

答えて

4

reloadData()メソッドは、メインスレッドで実行する必要があります。 dataTaskWithRequest(_ request: NSURLRequest)は、バックグラウンドスレッドで実行されます。

let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 

    dispatch_async(dispatch_get_main_queue(),{ 
     //Update data store…. 
     self.tableView.reloadData() 
    }) 

}) 

task.resume() 
+0

ありがとうございます。 1つのこと - データストアの更新をdispatch_async呼び出しの外側/上に置きます。 –

+0

@MarcusLeon UIタスクはメインスレッドで実行する必要があります。 – angeldev

2

完了ハンドラはバックグラウンドスレッドで呼び出されます。メインのスレッド/キューでreloadDataに電話する必要があります。

関連する問題