如何从View Controller中引用App Delegate中的managedObjectContext?

时间:2010-02-15 03:15:41

标签: iphone core-data sdk uitabbarcontroller

我知道还有其他问题涉及这个主题,但似乎没有一个问题与我所遇到的完全一致,因此是新问题。

我有一个应用程序,它是一个UITabBarController,我已经定义了两个子视图

两个选项卡的Identity Inspector中的Class属性都设置为UINavigationController。

两个子视图都是Class UIViewController并包含MKMapView对象。

我正在尝试集成Core Data,目标是我可以使用Core Data存储有关我想要放置在地图上的对象的信息。

我的UITabBarController在我的Delegate头文件中定义为'rootController'。 我还在那里定义了managedObjectModel,managedObjectContext和persistentStoreCoordinator属性。

在Delegate实现中,我有上述属性的标准访问器方法,我的rootController定义如下:

- (void)applicationDidFinishLaunching:(UIApplication *)application {

[window addSubview:rootController.view];
[window makeKeyAndVisible];

}

在我的子视图控制器中,我已经定义了我的managedObjectContext并对其进行了合成。

现在我的问题是,我无法让编译器允许我从View控制器中引用App Delegate中的managedObjectContext。

我在applicationDidFinishLaunching方法中尝试了以下内容:

firstView.managedObjectContext = self.managedObjectContext;

但我得到以下错误:

Accessing unknown 'setManagedObjectContext:' class method

任何人都可以帮我解决这个问题吗?

由于


更新

要添加我的问题,我将通过提供更多详细信息来解决一些问题

我的appdelegate.h文件中有一个@Class声明 我的appdelegate.m文件中有一个#import语句,用于firstView.h文件 我在appdelegate.h文件中声明了我的firstView,如下所示

FirstView *firstView;

2 个答案:

答案 0 :(得分:2)

firstView如何声明和分配?

它应该是对具有名为“managedObjectContext”的属性的对象的引用。

答案 1 :(得分:0)

我遇到了同样的问题,我会分享我的解决方案。

首先,你需要在nib文件的Tab栏中引用Nav Controller,确保你连接它。

IBOutlet UINavigationController *navigationController;

然后,按照支持文档中的建议获取Controller,并将其发送到managedObjectContext:

SavedTableViewController *saved = (SavedTableViewController *)[navigationController topViewController];
saved.managedObjectContext = self.managedObjectContext;
Alex(来自另一篇文章)是对的,“你通常应该避免从app委托中获取共享对象。它使得它的行为太像一个全局变量,并且它有一大堆与之相关的问题。 “