从设备删除我的应用程序后,我收到'Cannot create an NSPersistentStoreCoordinator with a nil model'
错误。我在iPad设备上测试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]
返回零值。
我做了以下事情,没有成功:
__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
.xcdatamodeld
位于Copy Bundle Resources and Compile Sources .xcdatamodeld
并多次清理和关闭Xcode项目$ cd /Users/john/Library/Developer/Xcode/DerivedData
我一直在寻找解决方案几个小时,我仍然找不到它。
答案 0 :(得分:15)
最后,在两天试图解决这个问题后,我在这里找到了解决方案:
How to create the magic .xcdatamodeld folder / package?
我现在正在完成一个其他开发人员启动的项目,似乎他没有将最新的更改推送到repo,但这些更改都在设备的应用程序中,当我删除了我删除的应用程序时正确的.xcdatamodeld
文件。问题是我在项目中只有一个MyApp.xcdatamodel
文件,而这似乎是momd
空文件夹的原因。
为了创建正确的数据模型层次结构,解决方案非常简单:
MyApp.xcdatamodel
这会将MyApp.xcdatamodel
文件嵌入MyApp.xcdatamodeld
。现在momd
文件夹中有mom
个文件,应用程序运行正常。现在唯一的问题是我有两个MyApp.xcdatamodel
,一个带有绿色选中图标,但两者都有相同的内容,所以没问题。
答案 1 :(得分:2)
我支持再次构建我的第一个iOS应用程序。今天,我收到了这个错误:“无法使用nil模型创建NSPersistentStoreCoordinator”。 实际上,这很容易解决。 请制作以下代码:
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"[name]" withExtension:@"momd"];
您填写的[name]与您的模型文件(.xcdatamodeld)相同。 例如,我有一个TipRecord.xcdatamodeld,那么这一行应该是:
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TipRecord" withExtension:@"momd"];
答案 2 :(得分:1)
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"select xcdatamodeld" withExtension:@"momd"];
为资源名称选择确切的网址。
答案 3 :(得分:0)
它相对简单。
如果你有一个xcdatamodel文件没有版本:使用扩展名" mom"在您的managedObjectModel声明中。 如果你的xcdatamodel有版本,你应该使用" momd"。