核心数据实例化实体

时间:2014-01-30 00:25:44

标签: objective-c xcode core-data

我是Core Data的新手,但似乎每当我在Appdelegate.m以外的文件中的任何地方实例化实体时,它们都会崩溃。例如,在我的MainViewController.m中,我只写了这个:

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

}

即使只是输入这个,我也会得到SIGABRT。每次。我有#imported我的实体的NSManagedObject子类到这个文件,但它一直给我SIGABRT。但是,每当我在AppDelegate.m

中实例化实体时,它都不会这样做

感谢所有帮助,谢谢。

3 个答案:

答案 0 :(得分:1)

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

此外,请注意您发布的代码不会实例化实体。您将获得对NSEntityDescription

的引用

答案 1 :(得分:0)

不想侮辱你,但我看到了你的问题和反应,并认为我会添加一点。我同意这个解决方案,但如果你是新手(因为我不久前),这可能不足以让你得到你需要的东西。

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

NSLog(@"managedObjectContext = %@",managedObjectContext);

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

2014-01-29 20:51:55.420 ModuleName [19405:70b] managedObjectContext = NSManagedObjectContext: 0x10913de60

注意值0x10913de60 ......这是一个很好的值。

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

2014-01-29 20:51:55.420 ModuleName [19405:70b] managedObjectContext = NSManagedObjectContext:(null)

注意值(null) ...这是一个错误的值。

此外,网上有一本非常好的书可以很好地解释核心数据。这本书是:

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

我并没有迷上这些人,对他们的销售没有兴趣,但这本书确实让我对这类话题感到不满。我想我支付了大约15美元...这是值得的,以阻止我的头撞在墙上的愚蠢的东西。

希望这有帮助!

格伦

答案 2 :(得分:0)

我发现了问题。在我的viewDidFinishLaunchingWithOptions中的AppDelegate.m中,我这样做了:

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

controller.managedObjectContext = self.managedObjectContext;

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