NSURagedObjectModel initWithContentsOfURL返回nil,尽管modelURL有效

时间:2011-07-19 15:52:54

标签: iphone nsmanagedobject

我的NSManagedObjectModel在路径正确的情况下返回nil。

        NSString *modelKey = [NSString stringWithFormat:@"/%@/Model", name];
    NSString *modelPath = [((Configuration *)[Configuration shared]) stringEntry:modelKey];
    NSURL *modelURL = nil;
    if ( ! [modelPath contains:@"://"] ) {
        modelPath = PathForBundleResource( modelPath );
        modelURL = [NSURL fileURLWithPath:modelPath];
    }
    NSManagedObjectModel *m = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

NSString * PathForBundleResource(NSString * relativePath)

    NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
return [resourcePath stringByAppendingPathComponent:relativePath];

我重置了模拟器,做了一个干净的构建,但没有任何帮助。

我是iPhone编程新手(特别是核心数据)。

感谢任何帮助。

编辑:我编辑了有关xcdatamodeld文件的原始帖子。它最初没有正确连接,但现在它仍然存在同样的问题。

编辑2:显然,xcdatamodel的名称在链接后对xcdatamodel的名称有一些变化。它现在正在运作。感觉很蠢。不知道如何删除这个问题。

6 个答案:

答案 0 :(得分:58)

我重命名.xcdatamodeld文件后遇到了同样的问题。关闭并重新打开Xcode客户端解决了这个问题。

答案 1 :(得分:4)

我刚刚在不区分大小写的文件系统上更改了.xcdatamodeld文件名称(例如重构的“mydatastore.xcdatamodeld”到“MyDatastore.xcdatamodeld”)的情况后才遇到此问题。

该修复程序包含以上两个答案:

  1. 将数据模型文件重构为截然不同的名称,例如: “MyDatastoreTemporary.xcdatamodeld”

  2. 产品>清洁

  3. 关闭XCode。重新打开XCode和项目。

  4. 将数据模型文件重新形成其最终名称,例如: “MyDatastore.xcdatamodeld”

  5. 产品>清洁

  6. 关闭XCode。重新打开XCode和项目。

答案 2 :(得分:1)

我尝试了上述两个答案,但是对我来说修复它的方法是从/向Xcode项目中删除并重新添加.xcdatamodeld文件。不需要清洁。由于某种原因,添加它似乎可以解决问题。

答案 3 :(得分:1)

我解决了问题,转移到了废弃模型.xcdatamodeld,然后又添加了它。

答案 4 :(得分:0)

迄今为止最安全的方法是,如果您尚未对模型进行版本化,则执行以下操作:

  1. 不要重命名您的xcdatamodeld文件。
  2. 而是使用新名称创建一个全新的数据模型文件。
  3. 将文件保留为空并退出Xcode
  4. 打开终端并将cd(更改目录)放入旧的xcdatamodeld目录。
  5. 此目录中的内容应该是以xcdatamodel结尾的目录。切换到此目录。
  6. 在xcdatamodel目录中,您将找到名为contents的文件。将此文件复制到新命名的.xcdatamodeld /?。xcdatamodel目录下的相同位置。
  7. 打开Xcode并修改您的Core Data代码以访问此新模型。
  8. 构建和测试。
  9. 从项目中删除旧的xcdatamodeld。
  10. 这适用于没有版本的基本型号。

答案 5 :(得分:0)

第一次运行项目时,我将扩展指定为 xcdatamodeld 。但那失败了,应该是妈妈。但我通过了一个零而不是妈妈,假设延期不是强制性的。但是对于nil, initWithContentsOfURL 失败,当我最终输入 momd 时,它运行正常。