如何从UI深处的控制器访问managedObjectContext?

时间:2009-09-13 15:07:48

标签: iphone core-data

我对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共享给应用程序中的多个子控制器的一般正确方法是什么?

3 个答案:

答案 0 :(得分:6)

我猜这是假设核心数据初始化在AppDelegate中完成的首选方法:

[[[UIApplication sharedApplication] delegate] managedObjectContext]

答案 1 :(得分:2)

我通常给控制器一个- (id)initWithManagedObjectContext:(NSManagedObjectContext *)context init方法和一个相应的变量。

如果控制器依次创建另一个控制器,它将在需要时以相同的方式将NSManagedObjectContext传递给该控制器。


如果您不想创建额外的init方法,只需为控制器提供NSManagedObjectContext的属性,并在创建后直接设置该属性。

我通常会尝试限制直接处理和“了解”核心数据的控制器数量。

答案 2 :(得分:1)

this question的答案提供了几种在应用程序深处访问核心数据堆栈的方法。正如我在其中一条评论中指出的那样,我更喜欢使用可以从任何地方访问的单例DatabaseController,类似于NSUserDefaults的standardUserDefaults的工作原理。