TableView не перезагружается из NSNotification - PullRequest
0 голосов
/ 19 января 2011

У меня возникли проблемы с перезагрузкой tableView с использованием NSNotification.

Моя установка состоит в том, что у меня есть представление фильтра, которое позволяет пользователю применять фильтры к представлению таблицы, как только они щелкают, чтобы изменить фильтр, я отправляю NSNotification, который выбирается в AppDelegate, после чего происходит перезагрузка ядра данные, применяющие фильтры в качестве предиката.

После того, как данные были загружены из основных данных, я отправляю в TableView еще одно Уведомление, которое говорит ему о необходимости перезагрузить свои данные.

Используя NSLog, я вижу, что уведомления отправляются и принимаются, хотя [self.tableView reloadData] ничего не делает.

Вот моя функция для перезагрузки данных:

-(void)reloadTable:(NSNotification *)notification {
    NSLog(@"reloading table");
    [self.rootTableView reloadData];
}

Вызов reload таким же образом изнутри контроллера, пока он находится в поле зрения, работает нормально, поэтому я довольно удивлен, почему это не работает.

Ответы [ 3 ]

3 голосов
/ 19 января 2011

Уведомление поступает в поток, отличный от основного потока? Это было бы, если бы уведомление было отправлено из фонового потока. Если это так, вам нужно маршалировать вызов reloadData для основного потока. Примерно так:

[tableView performSelectorOnMainThread: @"reloadData" withObject:nil waitUntilDone:NO];
1 голос
/ 14 июня 2012

Это для ловли уведомления.Вы можете поместить это в viewDidLoad.

NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
[center addObserverForName:kSFAccountsChanged object:nil 
                     queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
                             [tblView ReloadData];
                         }];
}

Приведенный ниже код вызовет уведомление:

NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
[center postNotificationName:kSFAccountsChanged object:self];
0 голосов
/ 19 января 2011

1)

Прикрепили ли вы свою таблицу к rootTableView в конструкторе интерфейсов?

Попробуйте добавить

NSLog(@"%@", self.rootTableView);

Это не должно быть нулевым:)

2)

Если вы правильно подключили, можете ли вы опубликовать код в методах делегатов табличного представления, чтобы увидеть, что там происходит?

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