Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在故事板中使用带选项卡栏控制器的核心数据_Iphone_Ios_Core Data_Storyboard - Fatal编程技术网

Iphone 在故事板中使用带选项卡栏控制器的核心数据

Iphone 在故事板中使用带选项卡栏控制器的核心数据,iphone,ios,core-data,storyboard,Iphone,Ios,Core Data,Storyboard,我正在从视图控制器调用选项卡栏控制器,以实现用户可以配置的一系列附加控件和输入。在情节提要中,这很容易做到,但如何才能最好地将核心数据管理对象上下文传递给由选项卡控制器承载的视图控制器?这里的最佳设计方法是什么: 忘记情节提要,用代码完成应用程序的这一部分?这很简单。我只需将托管对象上下文传递给每个视图,然后再将它们添加到选项卡控制器 向启动选项卡视图控制器的视图控制器添加托管对象上下文属性?在每个目标视图控制器中使用presentingViewController属性当然可以做到这一点,但这似

我正在从视图控制器调用选项卡栏控制器,以实现用户可以配置的一系列附加控件和输入。在情节提要中,这很容易做到,但如何才能最好地将核心数据管理对象上下文传递给由选项卡控制器承载的视图控制器?这里的最佳设计方法是什么:

  • 忘记情节提要,用代码完成应用程序的这一部分?这很简单。我只需将托管对象上下文传递给每个视图,然后再将它们添加到选项卡控制器
  • 向启动选项卡视图控制器的视图控制器添加托管对象上下文属性?在每个目标视图控制器中使用
    presentingViewController
    属性当然可以做到这一点,但这似乎不是最初的目的
  • 是否通过根视图控制器的某些属性直接通信?我在网上看到过这方面的参考资料,但对此不确定
  • 从托管数据上下文中,不需要从
    dismissModalViewController
    消息中执行任何其他操作,即可返回到原始视图。其他一切都通过核心数据进行管理

    有几个选项:

  • prepareForSegue
    过程中传递托管对象上下文(您必须访问选项卡视图控制器的
    viewControllers
    数组才能获得单个视图控制器)
  • 构造应用程序,使核心数据堆栈可以从应用程序委托类或单独的单例全局获得。然后,视图控制器可以在需要时请求托管对象上下文
  • 可能会滥用委托,将某个对象设置为选项卡栏控制器的委托,该委托也恰好包含托管对象上下文-这将从选项卡栏控制器中的所有视图控制器中可用。这只是我刚刚想到的,可能是个坏主意 有两种选择:

  • prepareForSegue
    过程中传递托管对象上下文(您必须访问选项卡视图控制器的
    viewControllers
    数组才能获得单个视图控制器)
  • 构造应用程序,使核心数据堆栈可以从应用程序委托类或单独的单例全局获得。然后,视图控制器可以在需要时请求托管对象上下文
  • 可能会滥用委托,将某个对象设置为选项卡栏控制器的委托,该委托也恰好包含托管对象上下文-这将从选项卡栏控制器中的所有视图控制器中可用。这只是我刚刚想到的,可能是个坏主意
    当主视图控制器收到
    -prepareforsgue:
    消息时,选项卡栏控制器及其管理的视图控制器将已经创建。您可以从segue本身获取选项卡栏控制器,然后从选项卡栏控制器获取视图控制器数组,如下所示:

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

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

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

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        UITabBarController *tbc = [segue destinationViewController];
        NSArray *controllers = [tbc viewControllers];
        NSLog(@"View Controllers: %@", controllers);
    }
    
    现在,您需要执行一点错误检查,以确保目标控制器确实是选项卡栏控制器,但您可以使用代码替换
    NSLog()
    ,以根据需要配置控制器。出于您的目的,这只意味着向他们提供他们应该操作的托管对象上下文