UITableView с использованием NSMutableArray для отображения динамического содержимого - PullRequest
0 голосов
/ 03 декабря 2009

Давно искали решение, но пока безуспешно, возможно, кто-то здесь может мне помочь.

Я создал приложение, которое запускает поток, который взаимодействует с веб-сервером в фоновом режиме. Иногда поток получает информацию, которую я хотел бы отобразить в 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:

Кто-нибудь понял, что я делаю не так?

1 Ответ

1 голос
/ 04 декабря 2009

Обновление происходит в главном потоке? Вы можете использовать такую ​​функцию обновления, чтобы убедиться, что она работает.

- (void)refresh {
if([NSThread isMainThread])
{
    [self.tableView reloadData];
    [self.tableView setNeedsLayout];
    [self.tableView setNeedsDisplay];
}
else 
{
    [self performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:YES];
}

}

...