2012-02-24 50 views
5

我的应用程序使用位置数据并将其作为表格和地图呈现。如何共享一个UIManagedDocument使用故事板和选项卡栏控制器作为初始控制器?

它以一个标签栏控制器,每一个它的观点是导航控制器(一个用于表视图,一个用于地图,等...)。

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

原本我以为继承选项卡栏控制器及添加一个UIManagedDocument作为属性,只是将它传递给每个控制器上用于赛格瑞方法制备的。但是我读到UITabBarController并不意味着被子类化。

另一种方法可以创建一个视图控制器,增加了管理的文件财产和标签栏吧。但我认为,通过图形和其他代码形式展示一些关系,我的故事板不清晰或不一致。

哪一个是合适的?还是有更好的方法来做到这一点?

提前感谢和最诚挚的问候。

回答

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"];    
    } 
} 
+0

我应该做的是在App代表? – Armando 2012-03-22 20:34:18

+0

不,这应该写在ViewController中,它位于TabBarController之前。 我在这里使用的称为Key Value Coding设计模式。 使用它,我将每个TabBarController的控制器的“文档”属性分配给self.document。 – Shmidt 2012-03-23 09:30:03

+0

很好的教程使用UIManagedDocument:http://www.informit.com/articles/article.aspx?p=1842295&seqNum=10 – Shmidt 2012-03-23 09:31:09

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

相关问题