6

'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 实例化__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 删除(再次)应用程序

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

4

4 回答 4

15

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

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

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

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

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

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

于 2012-09-27T14:14:06.273 回答
2

我支持再次构建我的第一个 iOS 应用程序。今天,我收到了这个错误:'Cannot create an NSPersistentStoreCoordinator with a nil model'。实际上,这很容易解决。请制作这行代码:

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

您填写的 [name] 与您的模型文件 (.xcdatamodeld) 相同。例如我有一个 TipRecord.xcdatamodeld 那么这一行应该是:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TipRecord" withExtension:@"momd"];
于 2014-08-13T16:18:48.780 回答
1
 NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"select xcdatamodeld" withExtension:@"momd"];

为资源名称选择确切的 url..

于 2012-10-03T13:44:33.470 回答
0

它相对简单。

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

于 2014-04-14T02:49:02.523 回答