insertNewObjectForEntityForName:

bob*_*obo 10 iphone core-data objective-c

我使用Xcode .xcdatamodel文件编辑器设置了一个实体.我创建了一个名为Person的实体,添加了一些属性,然后生成了一个.m文件来表示它.一切正常.

现在当我去编写一行代码时:

  Person * person = (Person*)[NSEntityDescription
                        insertNewObjectForEntityForName:@"Person"
                        inManagedObjectContext:managedObjectContext];

我得到:

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'+ entityForName:无法找到实体名称'Person'的NSManagedObjectModel

我完全按照位置示例,我相信一步一步,但我认为我必须错过某种关键的"注册"步骤,我告诉Xcode我的Person实体应该是可访问的.而且我没有根本就是"初始化"managedObjectContext的方法,Location示例似乎也没有这样做.

Rob*_*ier 15

您没有设置MOC的事实几乎肯定是问题所在.更具体地说,这意味着您可能没有加载定义Person的MOM(托管对象模型).代码中的某处你应该有这样的东西:

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    
Run Code Online (Sandbox Code Playgroud)

这样的事情:

persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
Run Code Online (Sandbox Code Playgroud)

这样的事情:

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
    managedObjectContext = [[NSManagedObjectContext alloc] init];
    [managedObjectContext setPersistentStoreCoordinator: coordinator];
Run Code Online (Sandbox Code Playgroud)

我只是从Core Data模板的AppDelegate中复制行(如果你创建一个使用Core Data的新应用程序,你会得到什么).

如果您拥有所有这些,请确保您的xcdatamodel列在构建的Compile Sources步骤中.当然要确保Person实际上是xcdatamodel中的实体名称.实体名称与Class不同,但它们通常设置为相同.