NSTableView从不同的控制器重新加载数据

时间:2013-01-14 12:03:24

标签: objective-c nstableview nstabview

我在更新两个表的内容时遇到问题,这两个表放在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

并且它工作正常,因为我打开由Controller1控制的选项卡后立即调用方法refreshTable。问题是我在不同的选项卡中有不同的表但我只能设置一个控制器作为NSTabView的委托,所以我不能在另一个表中更新由Controller3控制的表。 我不认为除了合并Controller1和Controller3之外,还有一个简单的方法来解决方法#3,但我认为我只是缺少与前两种方法相关的东西。

希望我能清楚地解释自己。有人可以帮忙吗?提前谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用notifications / observer重新加载tableview。

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(reloadTable:)
                                             name:@"reloadNotification"
                                           object:nil];

- (void)reloadTable:(NSNotification *)notif {
    [self.tableName reloadData];
}

在您的第一个标签中使用:

[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadNotification" 
                                                    object:nil];