1

我正在从视图控制器模态调用选项卡栏控制器,以实现用户可以配置的一系列附加控件和输入。在情节提要中,这很容易做到,但我怎样才能最好地将 Core Data 托管对象上下文传递给选项卡控制器托管的视图控制器?这里最好的设计方法是什么:

  1. 忘记情节提要并在代码中完成应用程序的这一部分?这很简单。在将托管对象上下文添加到选项卡控制器之前,我只需将它们传递给每个视图。
  2. 将托管对象上下文属性添加到启动选项卡视图控制器的视图控制器?使用每个目标视图控制器中的属性当然可以做到这一点presentingViewController,但这似乎不是最初的意图。
  3. 通过根视图控制器的某些属性直接通信?我在网上看到过对此的引用,但对此不确定。

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

4

2 回答 2

1

几个选项:

  1. 在期间传递托管对象上下文prepareForSegue(您必须访问选项卡视图控制器的viewControllers数组以获取您的各个视图控制器)
  2. 构建您的应用程序,使核心数据堆栈在全球范围内可用,无论是来自应用程序委托类还是单独的单例。然后,视图控制器可以在需要时请求托管对象上下文。
  3. 可能会滥用委托,您将某些对象设置为选项卡栏控制器的委托,该委托恰好保存托管对象上下文 - 然后可以从选项卡栏控制器中的所有视图控制器获得。这只是我刚刚想到的,可能是一个坏主意。
于 2012-04-30T20:48:25.890 回答
0

当您的主视图控制器收到-prepareForSegue:消息时,标签栏控制器和它管理的视图控制器将已经创建。您可以从 segue 本身获取选项卡栏控制器,然后从选项卡栏控制器获取视图控制器数组,如下所示:

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

现在,您需要进行一些错误检查,以确保目标控制器确实是选项卡栏控制器,但您可以替换为NSLog()代码以根据需要配置控制器。出于您的目的,这仅意味着将他们应该操作的托管对象上下文交给他们。

于 2012-04-30T20:52:54.310 回答