iOS:通知其他选项卡式视图控制器有关其数据集的更改

时间:2011-08-24 21:31:58

标签: iphone ios delegates uitabbarcontroller

我有一个标签栏控制器,里面有两个控制器:一个mapview控制器和一个tableview + NSFetcheddata控制器。两者都显示核心数据中特定日期的信息,并有一个按钮以模态显示日期选择器。

当模态视图控制器通过委托消失时,我已经实现了控制器数据集的更改,但我希望两个控制器更新他们的数据而不仅仅是显示模态控制器的人。

我考虑在两个控制器中创建协议并将彼此设置为其委托,但我想知道我是否在这里做。

干杯,

亨利

3 个答案:

答案 0 :(得分:7)

有很多不同的方法可以做到这一点。一种方法是使用NSNotificationCenter。定义您自己的自定义通知名称:

static NSString *const CSDataUpdatedNotification = @"CSDataUpdatedNotification";

在两个控制器中订阅此通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataUpdated:) name:CSDataUpdatedNotification object:nil];

并实施dataUpdated:来更新您的数据:

- (void)dataUpdated:(NSNotification *)notification
{
    // Handle updates here
}

在导致更改的控制器中,发布通知:

- (void)updateData
{
    // Data updating routine
    // ...

    [[NSNotificationCenter defaultCenter] postNotificationName:CSDataUpdatedNotification object:self];
}

答案 1 :(得分:1)

您可以将两者都设置为委托(即两个委托),并为两者重新使用模态视图控制器。

或者,使用NSNotificationCenter,,但我认为委托方法更好,因为关系更接近。如果你想要发送多个对象,这就是你要走的路。

答案 2 :(得分:0)

亨利, 对iOS不熟悉,我不会称之为“答案”,但使用全局通知系统对我来说这种问题听起来并不合适。

寻找类似问题的答案,我偶然发现了NSFetchedResultsController的引用,它会为你计算结果,很容易被用作UITableView模型 - 只读取知识。与您的问题相关的部分似乎是它的委托NSFetchedResultsControllerDelegate,它定义了一些方法,允许将结果的更改传达给任意数量的相关方。

但正如我所说,我只是偶然发现它,现在正试图利用它。

问候,nobi