核心数据模型文件在重命名时不加载

dav*_*vid 14 cocoa core-data

我有一个名为"Model"的模型文件.如果我将其重命名为"SomeOtherName",它就不会被加载.

initWithContentsOfURL 返回nil并且:

mergedModelFromBundles: [NSArray arrayWithObjects:[NSBundle mainBundle], nil]; 
Run Code Online (Sandbox Code Playgroud)

...崩溃因为它认为这个阵列中有零.

我被允许重命名我的模型,所以有什么不对吗?我无法提供更多信息,因为我没有:P SomeOtherName模型放在包中,它应该加载得很好.

谢谢

Mar*_*ark 27

我刚遇到同样的问题.这是我解决它的方式:

单独重命名模型文件是不够的,因为它不会重命名对当前模型版本的引用.

事实证明,模型版本存储在单独的plist文件中.只需在文本编辑器中打开它,然后将旧名称更改为新的模型文件名.

文件: YourNEWModelFile.xcdatamodeld/.xccurrentversion

<plist version="1.0">
  <dict>
     <key>_XCCurrentVersionName</key>
     <string>YourModelFile.xcdatamodel</string>  <-- Change this to YourNEWModelFile
  </dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

请注意,只有在开发期间重命名模型文件时才执行此操作.要将数据模型迁移到新版本,请遵循Core Data文档.


ndf*_*red 0

你的核心数据初始化代码是什么样的?它应该看起来像这样:

NSManagedObjectModel *managedObjectModel = nil;
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"SomeOtherName" withExtension:@"mom"];

NSAssert(modelURL != nil);
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
Run Code Online (Sandbox Code Playgroud)