2013-08-03 4 views
0

Может кто-то прояснить что-то для меня. Apple, документация UITableView говорит, когда uitableview вызывает reloaddata

`UITableView` overrides the layoutSubviews method of `UIView` so that it calls reloadData only when you create a new instance of `UITableView` or when you assign a new data source. 

Я получаю следующее поведение:

В моих viewDidLoad, я tableView.dataSource = self.

В моей getDataFromDatabase я называю [tableView reloadData]. Кажется, что это работает нормально, но я думаю, что происходит то, что таблица заполняется пустым массивом, а затем, когда вызов db возвращается, он перезагружает его массивом с данными.

Я пытаюсь сделать следующее: В viewDidLoad, удалить tableView.dataSource = self;, и добавить его в методе getDataFromDatabase. например

(void)getDataFromDatabase 
{ 
    [getData completionHandler^() // an async db call 
    { 
     tableView.dataSource = self; 
    }]; 
} 

Это, кажется, не работает. Таблица не заполнена. Он работает, если я добавлю [tableView reloadData] после установки dataSource = self, но из документации не следует автоматически вызывать reloadData, когда я устанавливаю dataSource = self, «он вызывает reloadData только при создании нового экземпляра UITableView или при назначении нового источника данных. " ?

+0

Пожалуйста, проверьте свой массив после получения деталей из базы данных. Если ваш запрос не сможет извлечь записи, какие данные будут перезагружаться в виде таблицы – chandan

+0

@Jason Данный код имеет несколько опечаток. Возможно, из-за этого есть проблема. Скопируйте и вставьте код, который компилятор смог проанализировать без ошибок. – CouchDeveloper

ответ

0

Является ли ваш «completHandler» включенным в основной поток? Если нет, или вы не уверены в этом, попробуйте выполнить свой код в основном потоке. Поскольку в соответствии с документацией на яблоко, результат не обновления пользовательского интерфейса на основном потоке неясен. Вы можете попробовать:

[getData completionHandler^() // an async db call 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     tableView.dataSource = self; 
    }); 

}]; 
+0

Hi liuyaodong - Спасибо за это. Я пробовал это, но он все еще не работает. Любые другие мысли? Очень странно... – Jason

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