我使用Xcode .xcdatamodel文件编辑器设置了一个实体。我创建了一个名为Person的实体,添加了一些属性,然后生成了一个.m文件来表示它。一切正常。
现在我去写一行代码,如:
Person * person = (Person*)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
我得到了:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'+ entityForName:无法找到实体名称'Person'的NSManagedObjectModel
我完全遵循了位置示例,我相信一步一步,但我认为必须错过某种关键的“注册”步骤,我告诉Xcode我的Person实体应该可访问..而且我根本没有办法“初始化”managedObjectContext,Location示例似乎也没有这样做。
答案 0 :(得分:15)
您没有设置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];
我只是从Core Data模板的AppDelegate中复制行(如果你创建一个使用Core Data的新应用程序,你会得到什么)。
如果您拥有所有这些,请确保您的xcdatamodel列在构建的“编译源”步骤中。当然要确保Person实际上是xcdatamodel中的实体名称。实体名称与Class不同,但它们通常设置为相同。
答案 1 :(得分:3)
您需要核心数据的初始化
-(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];
}
答案 2 :(得分:2)
您应该检查NSManagedObjectContext对象是否为nil。
e.g。
if (self.managedObjectContext == nil) {
NSLog(@"NSManagedObjectContext is nil");
return nil;
}