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];
Другие вопросы по тегам