从设备上删除应用程序后,无法创buildNIL模型的NSPersistentStoreCoordinator

从设备中删除我的应用程序后,我收到'Cannot create an NSPersistentStoreCoordinator with a nil model'错误。 我正在iPad设备上testing一个iPhone应用程序。 我已经把这个代码来检查,如果我有AppDelegate.m的文件:

 - (NSManagedObjectModel *)managedObjectModel { if (__managedObjectModel != nil) { return __managedObjectModel; } NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Name" withExtension:@"momd"]; if ([[NSFileManager defaultManager] fileExistsAtPath:[modelURL path]]) { NSLog(@"%@", [modelURL path]); //This is printed because file exists } __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; return __managedObjectModel; } 

问题是[NSManagedObjectModel initWithContentsOfURL]返回nil值。 我做了以下的事情,没有成功:

  1. 更改managedObjectModel实例与此__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
  2. 清理生成文件夹和清理项目
  3. 重新启动Xcode
  4. 重新启动计算机
  5. 把“妈妈”改成了“妈妈”
  6. .xcdatamodeld位于“复制包资源”和“编译源”中
  7. 重命名.xcdatamodeld并清理并closuresXcode项目几次
  8. closures并打开设备
  9. $ cd /Users/john/Library/Developer/Xcode/DerivedData删除文件夹
  10. 更改了强制数据库生成的sqlite名称
  11. 从devine删除(再次)应用程序

我一直在寻找解决scheme几个小时,但我仍然无法find它。

最后,在试图解决这个问题两天后,我在这里find了解决办法:

如何创build魔术.xcdatamodeld文件夹/包?

我现在正在完成其他开发人员开始的项目,似乎他没有将最新的更改推到回购站,但是这些更改已经在设备中的应用程序中,当我删除应用程序时,我删除了正确的项目.xcdatamodeld文件。 问题是我在项目中只有一个momd文件,这似乎有一个momd空文件夹的原因。

为了创build数据模型的正确层次,解决scheme非常简单:

  1. selectMyApp.xcdatamodel
  2. 转到编辑器>添加模型版本…

这将MyApp.xcdatamodel文件embeddedMyApp.xcdatamodeld 。 现在mom文件夹有mom文件和应用程序运行正常。 现在唯一的问题是,我有两个MyApp.xcdatamodel ,一个绿色select的图标,但都具有相同的内容,所以没有问题。

我支持再次构build我的第一个iOS应用程序。 今天,我得到这个错误:'不能创build一个NIL模型的NSPersistentStoreCoordinator'。 其实,这很容易解决。 请使这行代码:

 NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"[name]" withExtension:@"momd"]; 

您填写的[名称]与模型文件(.xcdatamodeld)相同。 例如,我有一个TipRecord.xcdatamodeld,那么这行应该是:

 NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TipRecord" withExtension:@"momd"]; 
  NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"select xcdatamodeld" withExtension:@"momd"]; 

select确切的资源名称的url..

它比较简单。

如果您有一个没有版本的xcdatamodel文件,请在您的managedObjectModel声明中使用扩展名“mom”。 如果你的xcdatamodel有版本,你应该使用“momd”。