2015-02-11 2 views
0

Я пытаюсь заполнить UITableView данными, которые я получаю с помощью вызова DataTaskWithURL. Тем не менее, рабочий стол загрузился до того, как начался обработчик завершения .Завершение обработчика слишком поздно

Я искал эту проблему и нашел вещи о перемещении ее в основную нить, но это, похоже, не работало. Любая идея о том, как я могу переместить ее в нужную очередь перед загрузкой таблицы?

Мой код:

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

Reload представление таблицы в конце обработчика завершения (но делать перезарядку на основном потоке). – rmaddy

+1

... и показать представление прогресса при получении данных или дать некоторые другие отзывы, чтобы пользователь знал, что что-то происходит. – Antonio

+1

Предположим, что 'self.jsonData' - ваш источник данных. Вызывает 'dispatch_async (dispatch_get_main_queue()) {self.tableView.reloadData()}' в последней строке этого 'completeHandler'. – sikhapol

ответ

1

необходимо проверить код ответа и данные первого. Код ответа, например, 200. Если есть вещь, которую вы ищете, вам необходимо перезагрузить TableView в своем блоке после подтверждения вашего ответа.

Убедитесь, что вы правильно интерпретируете свои данные в TableView.

Reload TableView // Swift

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

Код ответа // IOS

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

Привет, Четан, я не совсем понимаю, что вы предлагаете. Не могли бы вы представить пример кода? – MattG

Смежные вопросы