我对iPhone / Cocoa的理解仍然有点模糊,所以这可能是一个简单的问题。
我有一个基于CoreData Window的iPhone应用程序。 rootController是一个UITabBarController。第一个选项卡视图附有一个UINavigationController,其主视图中有一个表。
当App启动时,设置了objectContext,让App执行一次是有意义的。但是现在我在主控制器中有了managedObjectContext,但是我想把它传递给navcontroller里面的View的Controller,在TabBarController的选项卡列表的第一项内。我该怎么做?
命名UI Inspector Tool中的一个字段会允许我执行以下操作:
tabcontroller.navcontroller.manageObjectContext = self.managedObjectContext;
这只有在控制器被实例化并且“实时”时才会起作用。 (在需要控制器之前,控制器是否不会被实例化?)如果这个视图大部分被隐藏了怎么办?
无论如何,这可能是一件简单的事情,我只是不能正确理解事物。
将rootController中创建和设置的manageObjectContext共享给应用程序中的多个子控制器的一般正确方法是什么?
答案 0 :(得分:6)
我猜这是假设核心数据初始化在AppDelegate中完成的首选方法:
[[[UIApplication sharedApplication] delegate] managedObjectContext]
答案 1 :(得分:2)
我通常给控制器一个- (id)initWithManagedObjectContext:(NSManagedObjectContext *)context
init方法和一个相应的变量。
如果控制器依次创建另一个控制器,它将在需要时以相同的方式将NSManagedObjectContext
传递给该控制器。
如果您不想创建额外的init方法,只需为控制器提供NSManagedObjectContext
的属性,并在创建后直接设置该属性。
我通常会尝试限制直接处理和“了解”核心数据的控制器数量。
答案 2 :(得分:1)
this question的答案提供了几种在应用程序深处访问核心数据堆栈的方法。正如我在其中一条评论中指出的那样,我更喜欢使用可以从任何地方访问的单例DatabaseController,类似于NSUserDefaults的standardUserDefaults的工作原理。