从设备上删除应用程序后,无法创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值。 我做了以下的事情,没有成功:
- 更改managedObjectModel实例与此
__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
- 清理生成文件夹和清理项目
- 重新启动Xcode
- 重新启动计算机
- 把“妈妈”改成了“妈妈”
-
.xcdatamodeld
位于“复制包资源”和“编译源”中 - 重命名
.xcdatamodeld
并清理并closuresXcode项目几次 - closures并打开设备
- 从
$ cd /Users/john/Library/Developer/Xcode/DerivedData
删除文件夹 - 更改了强制数据库生成的sqlite名称
- 从devine删除(再次)应用程序
我一直在寻找解决scheme几个小时,但我仍然无法find它。
最后,在试图解决这个问题两天后,我在这里find了解决办法:
如何创build魔术.xcdatamodeld文件夹/包?
我现在正在完成其他开发人员开始的项目,似乎他没有将最新的更改推到回购站,但是这些更改已经在设备中的应用程序中,当我删除应用程序时,我删除了正确的项目.xcdatamodeld
文件。 问题是我在项目中只有一个momd
文件,这似乎有一个momd
空文件夹的原因。
为了创build数据模型的正确层次,解决scheme非常简单:
- select
MyApp.xcdatamodel
- 转到编辑器>添加模型版本…
这将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”。