2009-04-03 2 views
6

У меня есть UITableViewController как RootViewController. Мне нужно добавить строки в таблицу в зависимости от данных, которые я получаю из другого потока, который я инициирую из потока RootViewController. Когда я перенастраиваюсь из другого потока в поток RootViewController, у меня есть обновленные данные, но я не могу обновить TableView. Я назвал метод [self.tableview reloadData];, но это не работает. Я также пробовал вызов [self.tableview setNeedsDisplay], но безуспешно. Как обновить TableView с новыми данными?Не удалось обновить UITableView

In my RootViewController Class I have: 

- (void) reload { 

for(int i=0;i<[camDetails count];i++) 
{ 
    cCameraInformation *obj = [[cCameraInformation alloc] init]; 
    obj = [camDetails objectAtIndex:i]; 
    NSString *tString = [[NSString alloc] initWithFormat: @"  Remote  %s  %s",[obj->sCameraid UTF8String],[obj->sCameraid UTF8String]]; 
    [tableEntry addObject:tString]; 
} 
[self.tableView reloadData]; 
} 

Тогда есть поток класса приема, который непрерывно принимает данные. Его базовым классом является NSObject. Таким образом, я использовал класс делегирования приложения (который имеет экземпляр класса RootViewController), чтобы вызвать этот метод reload данных класса RootViewController в моем потоке приема.

Я не могу вызвать вышеупомянутый метод, используя performSelectorOnMainThread.

ответ

12

эй, вы уверены, что обновляете представление табличного вида/перезагружаете таблицу в основной теме? я столкнулся с той же проблемой, данные были там, но пока пользователь прокручивает, TableView не был обновлен

на прибегая к помощи я пришел, чтобы узнать, что вам нужно вызвать метод reloadData на основном потоке пользовательского интерфейса

пример код ниже:

- (void) getDataOnNewThread 
{ 
    // code here to populate your data source 
    // call refreshTableViewOnMainThread like below: 
    [self performSelectorOnMainThread:@selector(refreshTableView) withObject:nil waitUntilDone:NO]; 
} 

- (void) refreshTableView 
{ 
    [tableView reloadData]; 
} 
1

Убедитесь, что у вас есть правильные значения, возвращаемые из numberOfRowsForSection для стартеров.

Также убедитесь, что ваш метод cellForRowAtIndexPath использует эти данные для получения содержимого ячейки.

Ваш метод reloadData должен вызываться в основном потоке, а не в любом другом потоке.

Будет в состоянии помочь вам лучше, если вы сможете опубликовать соответствующий код.

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