从设备删除应用后,无法使用nil模型创建NSPersistentStoreCoordinator

amb*_*amb 6 iphone xcode core-data ios

'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;
}
Run Code Online (Sandbox Code Playgroud)

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

  1. 使用此更改managedObjectModel实例化 __managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
  2. 清理构建文件夹和清理项目
  3. 重启Xcode
  4. 重启电脑
  5. 将"妈妈"改为"妈妈"
  6. .xcdatamodeld 在Copy Bundle Resources和Compile Sources中
  7. .xcdatamodeld多次重命名并清理和关闭Xcode项目
  8. 关闭并打开设备
  9. 已删除的文件夹: $ cd /Users/john/Library/Developer/Xcode/DerivedData
  10. 更改了sqlite名称以强制生成数据库
  11. 从devine删除(再次)应用程序

我一直在寻找解决方案几个小时,我仍然找不到它.

amb*_*amb 15

最后,经过两天试图解决这个问题,我在这里找到了解决方案:

如何创建神奇的.xcdatamodeld文件夹/包?

我现在正在完成一个其他开发人员启动的项目,似乎他没有将最新的更改推送到repo,但这些更改都在设备的应用程序中,当我删除应用程序时,我删除了正确的.xcdatamodeld文件.问题是我MyApp.xcdatamodel在项目中只有一个文件,这就是拥有一个momd空文件夹的原因.

为了创建正确的数据模型层次结构,解决方案非常简单:

  1. 选择 MyApp.xcdatamodel
  2. 转到编辑器>添加模型版本...

并将此MyApp.xcdatamodel文件嵌入到MyApp.xcdatamodeld.现在该momd文件夹包含mom文件,应用程序运行正常.现在唯一的问题是我有两个MyApp.xcdatamodel,一个带有绿色选中图标,但两者都有相同的内容,所以没问题.