Невозможно обновить UITableView - PullRequest
6 голосов
/ 03 апреля 2009

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

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. Итак, я использовал класс делегата Application (который имеет экземпляр класса RootViewController) для вызова этого метода данных перезагрузки класса RootViewController в моем потоке получения.

Я не могу вызвать вышеуказанный метод с помощью executeSelectorOnMainThread.

Ответы [ 2 ]

12 голосов
/ 03 апреля 2009

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

после поиска в Google я узнал, что вам нужно вызвать метод 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 голос
/ 03 апреля 2009

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

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

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

сможет помочь вам лучше, если вы сможете разместить соответствующий код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...