使用mergedModelFromBundles:和版本控制(CoreData)

cha*_*lax 11 iphone core-data core-data-migration

我正在尝试使用CoreData中的迁移功能.我已经关注了Apple文档.我在以下方法中遇到问题:

/**
 Returns the managed object model for the application.
 If the model doesn't already exist, it is created by merging all of the models found in the application bundle.
 */
- (NSManagedObjectModel *)managedObjectModel {

    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    /* 
     * NSInvalidArgumentException', reason: '*** -[NSCFArray insertObject:atIndex:]: attempt to insert nil'
     * 2010-02-17 16:27:15.338 Patrimoine[3037:207]
     */ 
    managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    
    return managedObjectModel;
}
Run Code Online (Sandbox Code Playgroud)

http://iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html上似乎存在同样的问题

然而,我确实选择了Apple建议的方法,使用菜单选项"添加模型版本".

你有什么主意吗?

Mar*_*rra 28

您需要清理您的项目.一旦你"版本"你的模型Xcode将其移动到一个包(文件夹)但它不会删除旧的.然后会发生的是,下次运行您的应用程序时,您的模型中有两个副本; 旧的和新的一个在妈妈的束里面.

执行项目 - >全部清除将解决此问题.


小智 9

此外,如果您在任何时候重命名模型,请确保重复"设置当前模型"步骤,切换到较旧的模型,然后再次返回到较新的模型.我的构建设置不会自动重置并保持将"当前模型名称"设置为不存在的模型,从而导致完全相同的问题.

您始终可以在构建产品的资源文件夹中,在导入的.momd目录内,在名为versioninfo.plist的文件中验证此设置是否正确 - 当前模型的设置必须与模型的实际名称匹配.