NSTableView перезагрузить данные с другого контроллера
У меня проблемы с обновлением содержимого двух таблиц, которые расположены на двух разных вкладках NSTabView
и каждый управляется другим контроллером (Controller1 и Controller3) от третьего контроллера (Controller2). Я попробовал три разных подхода:
Подход № 1: Я создал в Controller1 (контроллер таблицы invitesTableView
) метод refreshTable:
- (void)refreshTable {
invites = //fill my mutable array
NSLog(@"%@",invites);
[self.invitesTableView reloadData];
NSLog(@"invite's table view updated");
}
что я позже позвоню из Controller2 и сделаю:
Controller1 *controller1 = [[Controller1 alloc] init];
[controller1 refreshTable];
NSLog
печатает содержимое массива приглашает правильно, но таблица не обновляется. Я должен сказать, что при запуске приложения я вызываю тот же метод в Controller1, и содержимое массива приглашений корректно загружается в таблицу.
Подход № 2: Когда в Controller2 я делаю:
Controller1 *controller1 = [[Controller1 alloc] init];
controller1.invites = //fill my mutable array
NSLog(@"%@",controller1.invites);
[controller1.invitesTableView reloadData];
Но опять же содержимое таблицы не обновляется, даже если NSLog
показывает правильное содержание.
Подход № 3: Поскольку Controller1 контролирует содержимое NSTabViewItem
Я интегрировал в Controller1 метод:
- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)inviteTab
и это работает просто отлично, потому что я вызываю метод refreshTable
как только откроете вкладку, контролируемую Controller1. Проблема в том, что у меня есть разные таблицы на разных вкладках, но я могу установить только один контроллер в качестве делегата NSTabView
, поэтому я не могу обновить таблицу, контролируемую Controller3, в другую таблицу. Я не думаю, что есть простое решение для подхода № 3, кроме слияния Controller1 и Controller3, но я думаю, что я просто что-то упустил в отношении первых двух подходов.
Надеюсь, я объяснил себе ясно. Кто-нибудь может помочь? Заранее спасибо!
1 ответ
Вы можете использовать уведомления / наблюдателя, чтобы перезагрузить просмотр таблицы.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reloadTable:)
name:@"reloadNotification"
object:nil];
- (void)reloadTable:(NSNotification *)notif {
[self.tableName reloadData];
}
В вашей первой вкладке используйте это:
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadNotification"
object:nil];