UITableView использует NSmutableArray для отображения динамического контента
-
12-09-2019 - |
Вопрос
Давно ищу решение, но пока безуспешно, возможно, кто-то здесь сможет мне помочь.
Я создал приложение, которое запускает поток, который в фоновом режиме взаимодействует с веб-сервером.Иногда поток получает информацию, которую я хотел бы отобразить в UITableView.Из-за динамического характера контента я решил, что NSmutableArray должно быть достаточно для хранения информации с веб-сервера.
Всякий раз, когда я получаю информацию от веб-сервиса, мой AppDelegate отправляет уведомление.Мой UITableView регистрируется для получения определенных видов информации, которую я собираюсь показать в UITableView.
Метод initWithStyle UITableViewController содержит следующий код:
- (void)addContact:(NSNotification *)note {
NSLog(@"%@", [note object]);
NSString *message = (NSString *)[note object];
NSString *name = [[message componentsSeparatedByString:@":"] objectAtIndex:2];
contact = name;
[array addObject:contact];
}
- (void)viewDidLoad {
[super viewDidLoad];
array = [[NSMutableArray alloc] initWithObjects:@"test1", @"test2", nil];
tv.dataSource = self;
tv.delegate = self;
self.tableView = tv;
}
Массив в AddContact содержит данные, отображаемые в TableView.Все данные я вручную добавляю в массив во ViewDidLoad:будет показано в таблице, но этого не происходит с данными, добавленными в AddContact:метод.
Кто-нибудь понял, что я делаю неправильно?
Решение
Обновление происходит в основном потоке?Вы можете использовать такую функцию обновления, чтобы убедиться в этом.
- (void)refresh {
if([NSThread isMainThread])
{
[self.tableView reloadData];
[self.tableView setNeedsLayout];
[self.tableView setNeedsDisplay];
}
else
{
[self performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:YES];
}
}