繁体   English   中英

将核心数据与情节提要中的选项卡栏控制器一起使用

[英]using Core Data with tab bar controller in storyboard

我从视图控制器以模态方式调用选项卡栏控制器,以实现用户可以配置的一系列其他控件和输入。 在情节提要中,这很容易做到,但是如何最好地将核心数据托管对象上下文传递给选项卡控制器托管的视图控制器? 最好的设计方法是什么?

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

来自托管数据上下文的Appart,不需要任何其他操作, dismissModalViewControllerdismissModalViewController消息中的dismissModalViewController返回到原始视图即可。 其他所有内容均通过核心数据进行管理。

有两个选择:

  1. prepareForSegue期间传递托管对象上下文(您必须访问选项卡视图控制器的viewControllers数组以获取各个视图控制器)
  2. 对应用程序进行结构设计,以便可以从应用程序委托类或单独的单例全局获取核心数据堆栈。 然后,视图控制器可以在需要时询问被管理对象的上下文。
  3. 可能会滥用一些委托,在这些委托中您将某些对象设置为选项卡栏控制器的委托,而该委托恰好包含托管对象的上下文-这样,选项卡栏控制器中的所有视图控制器都可以使用该委托。 这只是我想到的,可能不是一个好主意。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM