3

我有一个使用 Core Data 的应用程序,我managedObjectContext在应用程序委托中创建了一个。

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

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

self.window.rootViewController

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

我试过:

instantiateViewControllerWithIdentifier:

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

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

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

提前致谢。

4

2 回答 2

1

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

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

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

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

要创建一个宏以节省您每次需要访问托管对象上下文时都必须写出的[[UIApplication sharedApplication] delegate]时间,请查看以下答案:Short hand for [[UIApplication sharedApplication] delegate]?

于 2013-05-28T09:40:05.840 回答
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;


      }
   }
于 2013-05-28T09:42:39.163 回答