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

Iphone 从设备中删除应用后,无法创建具有nil模型的NSPersistentStoreCoordinator,iphone,ios,xcode,core-data,Iphone,Ios,Xcode,Core Data,从设备中删除我的应用程序后,我收到一个“无法创建无型号的NSPersistentStoreCoordinator”错误。我正在iPad设备上测试iPhone应用程序。我将此代码用于检查文件是否位于AppDelegate.m: - (NSManagedObjectModel *)managedObjectModel { if (__managedObjectModel != nil) { return __managedObjectModel; } NSUR

从设备中删除我的应用程序后,我收到一个
“无法创建无型号的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实例化\uu managedObjectModel=[NSManagedObjectModel mergedModelFromBundles:nil]
  • 已清理的生成文件夹和已清理的项目
  • 重新启动的Xcode
  • 重新启动的计算机
  • 将“妈妈”改为“妈妈”
  • .xcdatamodeld
    位于复制捆绑资源和编译源代码中
  • 重命名
    .xcdatamodeld
    并多次清理和关闭Xcode项目
  • 关闭并打开设备
  • 已从以下位置删除文件夹:
    $cd/Users/john/Library/Developer/Xcode/DerivedData
  • 更改了用于强制生成数据库的sqlite名称
  • 已从devine(再次)删除应用程序

  • 我已经搜索解决方案好几个小时了,但仍然找不到。

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

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

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

  • 选择
    MyApp.xcdatamodel
  • 转到编辑器>添加模型版本
  • 这将
    MyApp.xcdatamodel
    文件嵌入到
    MyApp.xcdatamodeld
    中。现在
    momd
    文件夹中有
    mom
    文件,应用程序运行正常。现在唯一的问题是,我有两个
    MyApp.xcdatamodel
    ,一个带有绿色选中图标,但都具有相同的内容,因此没有问题

     NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"select xcdatamodeld" withExtension:@"momd"];
    

    为资源名称选择准确的url。

    这相对简单

    如果您的xcdatamodel文件没有版本:请在managedObjectModel声明中使用扩展名“mom”。
    如果您的xcdatamodel有版本,您应该使用“momd”。

    我支持再次构建我的第一个iOS应用程序。今天,我遇到了这样一个错误:“无法使用nil模型创建NSPersistentStoreCoordinator”。 事实上,这很容易解决。 请填写这行代码:

    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"[name]" withExtension:@"momd"];
    
    您填写的[名称]与模型文件(.xcdatamodeld)相同。 例如,我得到了一个TipRecord.xcdatamodeld,那么这一行应该是:

    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TipRecord" withExtension:@"momd"];
    

    它在模拟器上工作吗?你能在Xcode中打开
    .xcdatamodeld
    文件吗?艾伦,我能在Xcode中打开
    .xcdatamodeld
    文件,但应用程序在模拟器中不工作。它启动了,但只显示一个黑屏。我想我找到了一些东西。。。我刚刚意识到,我没有删除
    /Users/john/Library/Developer/Xcode/DerivedData
    中的所有文件,因此当我这样做时,模拟器运行正常,甚至managedObjectModel。有没有办法删除设备中的这些文件?从设备中删除应用程序应该会删除这些文件。现在,应用程序在模拟器中启动(仅当我删除衍生数据并重置内容和设置时),但我收到相同的
    managedObjectModel
    错误。