2012-04-30 38 views
1

我以模态方式从视图控制器调用标签栏控制器,以实现用户可以配置的一系列附加控件和输入。在故事板中,这很容易做到,但我怎样才能最好地将Core Data托管对象上下文传递给Tab控制器托管的视图控制器?这里最好的设计方法是什么:使用核心数据与故事板中的标签栏控制器

  1. 要忘记故事板,并在代码中执行应用程序的这部分?这很简单。在将它们添加到Tab控制器之前,我只是将托管对象上下文传递给每个视图。
  2. 将托管对象上下文属性添加到启动标签视图控制器的视图控制器?这当然可以在每个目标视图控制器中使用presentingViewController属性,但似乎并不是最初的目的。
  3. 直接通过根视图控制器的某些属性进行通信?我在网上看到了这一点,但我不确定这一点。

Appart从管理的数据上下文中,不需要从dismissModalViewController消息返回到原始视图。其他一切都通过Core Data进行管理。

回答

0

当您的主视图控制器获得-prepareForSegue:消息时,它所管理的标签栏控制器和视图控制器将已经创建。你可以从SEGUE本身的标签栏控制器,然后从标签栏控制器获得视图控制器的阵列,像这样:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    UITabBarController *tbc = [segue destinationViewController]; 
    NSArray *controllers = [tbc viewControllers]; 
    NSLog(@"View Controllers: %@", controllers); 
} 

现在,你会想要做一个小错误检查,以确保目标控制器确实是标签栏控制器,但您可以使用代码替换NSLog()以配置控制器,只要您喜欢。出于您的目的,这只是意味着将他们应该操作的托管对象上下文交给他们。

1

几个选项:

  1. 期间prepareForSegue传递管理对象上下文(你要访问的标签视图控制器的viewControllers阵列,让您的个人看法控制器保持)
  2. 结构化你的应用程序,使得核心数据栈可以全局使用,可以从应用程序委托类或单独的单例中获得。视图控制器然后可以在需要时请求托管对象上下文。
  3. 可能做一些代理滥用您设置一些对象作为标签栏控制器的代表碰巧保存托管对象上下文 - 然后将可以从标签栏控制器中的所有视图控制器中可用。这只是刚刚发生在我身上,可能是一个坏主意。
相关问题