Objective c 实例化实体的核心数据

Objective c 实例化实体的核心数据,objective-c,xcode,core-data,Objective C,Xcode,Core Data,我是核心数据的新手,但似乎每当我在文件中的任何位置实例化一个实体(Appdelegate.m除外),它们都会崩溃。例如,在我的MainViewController.m中,我只写了以下内容: - (void)viewDidLoad { [super viewDidLoad]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Data" inManagedObjectContext:managedObjec

我是核心数据的新手,但似乎每当我在文件中的任何位置实例化一个实体(Appdelegate.m除外),它们都会崩溃。例如,在我的MainViewController.m中,我只写了以下内容:

- (void)viewDidLoad
{
[super viewDidLoad];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Data"     inManagedObjectContext:managedObjectContext];

}
即使只是输入这个,我也会得到SIGABRT。每一次。我已经将实体的NSManagedObject子类导入到此文件,但它一直给我SIGABRT。但是,每当我在AppDelegate.m中实例化一个实体时,它都不会这样做


非常感谢您的帮助。

您的
NSManagedObjectContext
可能是
nil
。确保将
NSManagedObjectContext
从AppDelegate传递到其他视图控制器


此外,请注意,您发布的代码不会实例化实体。你得到了一个
n实体描述的参考

我不想侮辱你,但是我看到了你的问题和回答,我想我应该补充一点。我同意这个解决方案,但是如果你是一个新手(就像我不久前那样),这可能不足以满足你的需要

如果您想知道如何查看managedObjectContext是否为nil,只需将代码行放在NSEntityDescription命令之前

NSLog(@"managedObjectContext = %@",managedObjectContext);
如果正确传递了managedObjectContext,您将看到如下内容:

2014-01-29 20:51:55.420模块名称[19405:70b]managedObjectContext=NSManagedObjectContext:0x10913de60

请注意值0x10913de60…这是一个很好的值

如果未正确传递managedObjectContext,您将看到如下内容:

2014-01-29 20:51:55.420模块名称[19405:70b]managedObjectContext=NSManagedObjectContext:(空)

请注意值(null)…这是一个错误的值

此外,网上还有一本非常好的书,它在解释核心数据方面做得非常好。这本书是:

扎拉,马库斯S.(2013-02-05)。核心数据:iOS、OS X和iCloud(实用程序员)(Kindle位置3)的数据存储和管理。实用书架。Kindle版

我对这些人不感兴趣,对他们的销售也不感兴趣,但这本书确实让我在这类话题上度过了难关。我想我花了大约15美元……这是值得的,因为我不再为愚蠢的东西把头撞在墙上

希望这有帮助


格伦

我发现了问题。在我的AppDelegate.m中,在我的视图中,使用选项完成启动,我执行了以下操作:

UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
MainViewController *controller = (MainViewController *)navigationController.topViewController;

controller.managedObjectContext = self.managedObjectContext;

这使得我的managedObjectContext不是零。在一个不错的博客上找到了我的答案。忘记了名字,但他详细解释了为什么在某些情况下会让SIGABRT处理核心数据。

您的
managedObjectContext
设置为什么?就我所知,你没有在任何地方初始化它。