从设备中删除应用程序后收到'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]
返回 nil 值。我做了以下事情,但没有成功:
- 使用此
__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
更改托管对象模型实例化
已清理 - 构建文件夹和已清理项目
- 重新启动的 Xcode
- 重新启动的计算机 将"妈妈"
- 改为"妈妈"
-
.xcdatamodeld
在复制捆绑资源和编译源代码中 - 重命名
.xcdatamodeld
并多次清理和关闭 Xcode 项目 - 已关闭和打开设备
- 从以下位置删除文件夹:
$ cd /Users/john/Library/Developer/Xcode/DerivedData
- 更改了用于强制生成数据库的 sqlite 名称
- 从 devine 中删除(再次)应用程序
我已经在寻找解决方案几个小时了,但我仍然找不到它。
最后,在尝试解决此问题两天后,我在这里找到了解决方案:
如何创建神奇的.xcdatamodeld文件夹/包?
我现在正在完成其他开发人员启动的一个项目,似乎他没有将最新更改推送到存储库,但这些更改在设备中的应用程序中,当我删除应用程序时,我删除了正确的.xcdatamodeld
文件。问题是我在项目中只有一个MyApp.xcdatamodel
文件,这似乎是有一个momd
空文件夹的原因。
为了创建正确的数据模型层次结构,解决方案非常简单:
- 选择
MyApp.xcdatamodel
- 转到编辑器>添加模型版本...
这会将MyApp.xcdatamodel
文件嵌入到MyApp.xcdatamodeld
中。现在,momd
文件夹包含mom
文件,并且应用程序运行正常。现在唯一的问题是我有两个MyApp.xcdatamodel
,一个带有绿色选定的图标,但两者都具有相同的内容,所以没问题。
我再次支持构建我的第一个iOS应用程序。今天,我收到此错误:"无法使用零模型创建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"];
为"资源名称"选择"确切的 URL"。
相对简单。
如果您有没有版本的 xcdatamodel 文件:在 managedObjectModel 声明中使用扩展名"mom"。如果你的xcdatamodel有版本,你应该使用"momd"。