如何使用带有标签栏控制器的故事板作为初始控制器来共享UIManagedDocument?

时间:2012-02-24 09:12:52

标签: ios core-data ios5 uitabbarcontroller uistoryboard

我的应用程序使用位置数据,并将其作为表格和地图显示。

它以标签栏控制器开始,每个视图都是一个导航控制器(一个用于表视图,一个用于地图等)。

我想共享一个UIManagedObject以便使用相同的托管对象上下文,因此如果用户在表视图中更新,则数据也会针对地图进行更新,因此无需更新两次。

最初我想过将Tab Bar Controller子类化并添加一个UIManagedDocument作为属性,然后将它传递给prepare for segue方法的每个控制器。但我读到UITabBarController并不意味着要被子类化。

另一种方法可能是创建一个View Controller,将Managed Document添加为属性,并将Tab Bar添加到其中。但我认为我的故事板不清楚或不一致,通过图形显示某些关系,而其他人只是在代码中。

哪一个合适?或者有更好的方法吗?

提前致谢并致以最诚挚的问候。

2 个答案:

答案 0 :(得分:3)

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showGuide"]) 
    {
        UITabBarController *tabBarController = (UITabBarController *)[segue destinationViewController];
        for (id vc in tabBarController.viewControllers) {      
            [vc setValue:_document forKey:@"document"];            
    }
}

答案 1 :(得分:2)

我也遇到了这个问题,我选择了一个单独的文档处理程序类,它通过一个块提供对加载文档的访问。

[[MYDocumentHandler sharedDocumentHandler] performWithDocument:^(UIManagedDocument *document) {
    // Do stuff with the document, set up a fetched results controller, whatever.
}];

我已经写了我的解决方案并在此处发布了代码:Core Data with a Single Shared UIManagedDocument