如何将ManagedObjectContext传递给TabBarViewControllers

时间:2012-01-06 02:38:18

标签: iphone ios xcode core-data

在阅读stackoverflow中的几个问题之后,我目前仍然找不到答案。

我无法将ManagedObjectContext从appdelegate传递到我的tabbarcontroller视图。

在我的appdelegate.m中我有这个

#import "memoView.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    memoView *mView = (memoView *)navigationController.topViewController;
    mView.ObjectContext =[self managedObjectContext];
}

在memoView.m

- (void)viewDidLoad
{
    [super viewDidLoad];


    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription 
                                   entityForName:@"NoteLog" inManagedObjectContext:[self ObjectContext]];
    [fetchRequest setEntity:entity];
    NSError *error;
    self.memoInfo = [ObjectContext executeFetchRequest:fetchRequest error:&error];
    //self.title = @"Memo"; 
    [fetchRequest release];

}

错误原因:'+ entityForName:无法找到实体名称的'NSManagedObjectModel''NoteLog''

我不确定我做错了什么,我对核心数据相对较新。

任何评论都表示赞赏。

3 个答案:

答案 0 :(得分:2)

我曾经遇到过这个问题并且解决了这个问题:

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
self. ObjectContext = appDelegate.ManagedObjectContect;

答案 1 :(得分:1)

我个人实施Singleton for my CoreData Stack。 - 但是以更安全的方式like here.

单例模式基本上是“全局变量”的借口。虽然如果正确实施并明智地使用了最强大的模式之一。简单来说,它的作用是:它创建一个类的对象,如果它尚不存在,则将其存储在该对象类的静态变量中。并且由于类变量的内容在该类的所有实例中是相同的(显然),下次当您尝试分配类的实例时,它会检查它是否在之前分配,以及它是否返回旧实例。 / p>

因此,您基本上可以从任何地方“分配”,无论您经常想要什么,并且您将始终获得相同的对象。

然后人们倾向于将这个单例类称为“DataManager”或类似的东西。

答案 2 :(得分:1)

您在哪里放下以下代码?当您分配mView时,我猜mView.ObjectContext为零:

#import "memoView.h"
memoView *mView = (memoView *)navigationController.topViewController;
mView.ObjectContext =[self managedObjectContext];