iOS - 从appDelegate访问storyboard上的viewControllers

时间:2013-05-28 09:32:47

标签: iphone ios core-data storyboard viewcontroller

我有一个使用Core Data的应用,我在app delegate中创建了一个managedObjectContext

我想将managedObjectContext传递给故事板上的两个视图控制器,以便他们使用相同的managedObjectContext来保存和获取。

我可以通过以下方式访问第一个视图控制器:

self.window.rootViewController

但是我要访问的第二个视图控制器是在第一个视图之后从第一个视图中返回,并且没有从它返回任何引用。

我试过了:

instantiateViewControllerWithIdentifier:

但是这会创建一个新的视图实例,而不是允许我访问在segue之后出现的第二个视图控制器。

所以我的问题是,如何访问第二个视图控制器?

或者(因为我对此非常陌生)是否有更好的方法在视图控制器之间管理/传递数据?

提前致谢。

2 个答案:

答案 0 :(得分:1)

  

或者(因为我对此非常陌生)是否有更好的方法在视图控制器之间管理/传递数据?

这取决于您尝试传递的数据。在这种情况下,您希望为视图控制器提供对Core Data托管对象上下文的访问权限。因为这是您在应用程序生命周期中所需要的,所以让视图控制器通过您的应用程序代理访问它会更好。

您可以通过[[UIApplication sharedApplication] delegate]执行此操作 - 但是,您可能需要对其进行类型转换以避免编译器警告,或者您可能需要创建一个返回托管对象上下文的宏,以节省您的时间并生成代码更具可读性。

如果您在创建项目时告诉XCode您想要使用Core Data,那么您应该拥有在应用委托中检索对象上下文的方法。如果没有,你需要创建它们。

要创建宏以保存每次需要访问托管对象上下文时必须写出[[UIApplication sharedApplication] delegate],请查看以下答案:Short hand for [[UIApplication sharedApplication] delegate]?

答案 1 :(得分:0)

你可以通过这个: -

  UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
  MasterViewController *result;

//check to see if navbar "get" worked
   if (navigationController.viewControllers) {

//look for the nav controller in tab bar views 
      for (UINavigationController *view in navigationController.viewControllers) {

    //when found, do the same thing to find the MasterViewController under the nav controller
         if ([view isKindOfClass:[UINavigationController class]])
             for (UIViewController *view2 in view.viewControllers) 
                 if ([view2 isKindOfClass:[MasterViewController class]])                    
                     result = (MasterViewController *) view2;


      }
   }