【发布时间】:2012-02-13 19:42:49
【问题描述】:
我正在努力处理核心数据。我收到臭名昭著的错误“无法在 NSManagedObject 类上调用指定的初始化程序”。对于阅读文档的新手,从 Xcode 4.2 中的标准模板开始,此错误的存在/发生没有任何意义。 托管对象的初始化怎么可能失败? 我没有以任何方式从模型修改自定义生成的类。这意味着,我没有覆盖那些 NSManagedObject 子类的默认初始化程序 (initWithEntity:insertIntoManagedObjectContext:)。为什么调用不成功?
我的整个设置非常基础。 我有一个上下文、一个商店协调员和一个模型。这是由模板设置的。 我直观地编辑了数据模型,那里有四个实体。然后我生成了四个具有动态属性的类。 现在我唯一要做的就是将从 AppDelegate 对上下文的引用传递给我的自定义 ViewController。在这个自定义 ViewController 中,我尝试将一个新实体添加到 Core Data 上下文中。
是否有一些方法或一组步骤可以用来测试整个核心数据堆栈是否已正确初始化? store是否存在,context是否ok?
NSManagedObjectModel *managedObjectModel = [[managedContext persistentStoreCoordinator] managedObjectModel];
NSEntityDescription *entity = [[managedObjectModel entitiesByName] objectForKey:@"ComplexLocation"];
currentComplexLocation = [[ComplexLocation alloc] initWithEntity:entity insertIntoManagedObjectContext:managedContext];
【问题讨论】:
-
你能发布触发错误的代码,以及你生成的核心数据类吗?
-
我在尝试添加实体的地方添加了代码。
-
更容易使用便捷函数
[NSEntityDescription insertNewObjectForEntityForName:@"ComplexLocation" inManagedObjectContext: managedContext];话虽如此,在 initWithEntity 中使用之前,您是否检查以确保在 managedObjectModel 和 entity 中返回了正确的值? -
我该如何检查 -> “在 initWithEntity 中使用之前,您是否检查以确保在 managedObjectModel 和实体中返回了正确的值?”
标签: objective-c core-data ios5