2015-02-11 94 views
0

我試圖用我通過DataTaskWithURL調用獲取的數據填充UITableView。但是,桌面視圖已在完成處理程序開始之前加載。完成處理程序調用太晚

我搜索了這個問題,發現將它移動到主線程的東西,但似乎並沒有工作。任何想法如何在tableview加載之前將其移動到正確的que?

我的代碼:

var jsonData: JSON = [] 

func getRequestForTableView() { 

    let urlPath = "[URL]" 
    let url: NSURL = NSURL(string: urlPath)! 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in 

     let json = JSON(data: data) 

     println(json.count) 
     self.jsonData = json 
    }) 
    task.resume() 
} 
+1

刷新在完成處理程序結束表格視圖(但確實在主線程中重裝)。 – rmaddy 2015-02-11 16:07:00

+1

...並在獲取數據時顯示進度視圖,或給出其他反饋以讓用戶知道正在進行的操作 – Antonio 2015-02-11 16:07:55

+1

假設「self.jsonData」是您的數據源。在這個'completionHandler'的最後一行調用'dispatch_async(dispatch_get_main_queue()){self.tableView.reloadData()}'。 – sikhapol 2015-02-11 18:54:45

回答

1

需要先檢查響應代碼和數據。響應代碼,如200.如果您正在尋找的東西,您需要在確認您的響應後在您的塊中重新加載TableView。

請確保您在TableView中正確解釋您的數據。

刷新的TableView //斯威夫特

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

響應代碼// iOS的

if ([response statusCode] == 200) { 
      //reload table here    
} 
+0

嗨Chetan,我不完全明白你的建議。你能否提供一個代碼示例? – MattG 2015-04-20 13:51:47