从设备中删除我的应用程序后,我收到了一个“无法使用 nil 模型创建 NSPersistentStoreCoordinator”
错误。我正在 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]; 更改 managedObjectModel 实例化;
- 清理构建文件夹和清理项目
- 重新启动 Xcode
- 重启电脑
- 将“momd”更改为“mom”
.xcdatamodeld
在 Copy Bundle Resources and Compile Sources 中- 重命名
.xcdatamodeld
并多次清理和关闭 Xcode 项目 - 关闭和打开设备
- 已删除以下文件夹:
$ cd/Users/john/Library/Developer/Xcode/DerivedData
- 更改 sqlite 名称以强制生成数据库
- (再次)删除了来自 devine 的应用程序
我已经搜索了数小时的解决方案,但仍然找不到。
最佳答案
最后,经过两天尝试解决这个问题,我在这里找到了解决方案:
How to create the magic .xcdatamodeld folder / package?
我现在正在完成一个其他开发人员启动的项目,他似乎没有将最新的更改推送到 repo,但这些更改在设备中的应用程序中,当我删除应用程序时,我删除了正确的 .xcdatamodeld
文件。问题是我在项目中只有一个 MyApp.xcdatamodel
文件,这似乎是一个 momd
空文件夹的原因。
为了创建正确的数据模型层次结构,解决方案非常简单:
- 选择
MyApp.xcdatamodel
- 转到编辑器 > 添加模型版本...
这会将 MyApp.xcdatamodel
文件嵌入到 MyApp.xcdatamodeld
中。现在 momd
文件夹中有 mom
文件,应用程序运行正常。现在唯一的问题是我有两个 MyApp.xcdatamodel
,其中一个带有绿色的选中图标,但两者的内容相同,所以没问题。
关于iphone - 从设备中删除应用程序后无法使用 nil 模型创建 NSPersistentStoreCoordinator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12617585/