1

我在更新两个表的内容时遇到问题,这些表位于 a 的两个不同选项卡中NSTabView,每个选项卡由第三个控制器 (Controller2) 的不同控制器 (Controller1 和 Controller3) 控制。我尝试了三种不同的方法:

方法 #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 控制 a 的内容NSTabViewItem,我在 Controller1 中集成了该方法:

- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)inviteTab

它工作得很好,因为我一refreshTable打开由Controller1控制的选项卡就调用了该方法。问题是我在不同的选项卡中有不同的表,但我只能将一个控制器设置为 的委托NSTabView,因此我无法在不同的表中更新由 Controller3 控制的表。除了合并 Controller1 和 Controller3 之外,我认为没有一个简单的方法可以解决方法 #3,但我认为我只是缺少前两种方法的一些东西。

希望我清楚地解释自己。任何人都可以帮忙吗?提前致谢!

4

1 回答 1

3

您可以使用通知/观察者重新加载 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];
于 2013-01-14T12:11:48.780 回答