从设备中删除应用程序后,无法创建具有 nil 模型的 NSPersistentStoreCoordinator



从设备中删除应用程序后收到'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 值。我做了以下事情,但没有成功:

  1. 使用此__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];更改托管对象模型实例化
  2. 已清理
  3. 构建文件夹和已清理项目
  4. 重新启动的 Xcode
  5. 重新启动的计算机
  6. 将"妈妈"
  7. 改为"妈妈"
  8. .xcdatamodeld在复制捆绑资源和编译源代码中
  9. 重命名.xcdatamodeld并多次清理和关闭 Xcode 项目
  10. 已关闭和打开设备
  11. 从以下位置删除文件夹: $ cd /Users/john/Library/Developer/Xcode/DerivedData
  12. 更改了用于强制生成数据库的 sqlite 名称
  13. 从 devine 中删除(再次)应用程序

我已经在寻找解决方案几个小时了,但我仍然找不到它。

最后,在尝试解决此问题两天后,我在这里找到了解决方案:

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

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

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

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

这会将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"。

相关内容

最新更新