Objective c insertNewObjectForEntityForName:

Objective c insertNewObjectForEntityForName:,objective-c,iphone,core-data,Objective C,Iphone,Core Data,我使用Xcode.xcdatamodel文件编辑器设置了一个实体。我创建了一个名为Person的实体,添加了一些属性,然后生成了一个.m文件来表示它。一切正常 现在,当我写一行代码时,比如: Person * person = (Person*)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectC

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

现在,当我写一行代码时,比如:

Person * person = (Person*)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext]; Person*Person=(Person*)[n实体描述 insertNewObjectForEntityForName:@“个人” inManagedObjectContext:managedObjectContext]; 我得到:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“+entityForName:找不到实体名称“Person”的NSManagedObjectModel”
不过,我完全遵循了位置示例,我相信这是一步一步地进行的,但我想我一定错过了某个关键的“注册”步骤,我告诉Xcode我的Person实体应该可以访问。。此外,我根本没有办法“初始化”managedObjectContext,位置示例似乎也没有做到这一点。

您没有设置MOC这一事实几乎肯定是问题所在。最具体地说,这意味着您可能没有加载定义Person的MOM(托管对象模型)。在代码的某个地方,您应该有如下内容:

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
    managedObjectContext = [[NSManagedObjectContext alloc] init];
    [managedObjectContext setPersistentStoreCoordinator: coordinator];
像这样的:

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
    managedObjectContext = [[NSManagedObjectContext alloc] init];
    [managedObjectContext setPersistentStoreCoordinator: coordinator];
像这样的:

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
    managedObjectContext = [[NSManagedObjectContext alloc] init];
    [managedObjectContext setPersistentStoreCoordinator: coordinator];
我只是从核心数据模板的AppDelegate中复制行(如果您创建了一个使用核心数据的新应用程序,您会得到这些行)


如果您拥有所有这些,请确保在构建的编译源代码步骤中列出了xcdatamodel。当然,还要确保Person实际上是xcdatamodel中的实体名称。实体名称与类不同,尽管它们通常被设置为相同。

您需要核心数据的init

-(void)initCoreData{
        NSError *error;
        //Path to sqlite file.
        NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents/Level4.sqlite"];
        NSURL *url = [NSURL fileURLWithPath:path];

        //init the model
        NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];

        //Establish the persistent store coordinator
        NSPersistentStoreCoordinator *persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];

        if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]){

                NSLog(@"Error %@",[error localizedDescription]);

        }else{
                self.context = [[[NSManagedObjectContext alloc ] init ] autorelease];
                [self.context setPersistentStoreCoordinator:persistentStoreCoordinator];
        }

        [persistentStoreCoordinator release];
}

您应该检查NSManagedObjectContext对象是否为nil

e、 g


这有助于提醒我,我没有将NSManagedObject传递到下一个视图,这就是为什么我会出现上述错误。谢谢