【问题标题】:Adding Entity to Core Data将实体添加到核心数据
【发布时间】:2011-12-18 20:34:32
【问题描述】:

我们有一个使用 Core Data 的应用。 在下一个版本中,我想在已经存在的实体中添加一个新实体。

是否可以添加新的然后从软件中填充它,或者有什么我需要考虑的?

【问题讨论】:

    标签: ios core-data entity


    【解决方案1】:

    有几种类型的迁移。最简单的是带有推断映射模型的轻量级迁移——这意味着您只需告诉它进行迁移,其余的由软件处理。然而,需要注意的是,它只能应对某些类型的变化。添加实体应该没问题。

    要启用轻量级迁移,您需要在打开持久存储时传入几个选项​​:

    NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
    [options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
    [options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];
    
     NSError *error = nil;
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
    {
       NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    
    

    最后要做的一件事是在更改数据模型时,您需要添加模型版本。在 Xcode 4 中,在侧边栏中选择您的数据模型,从 Editor 菜单中选择 Add Model Version,然后命名您的新版本。然后您需要将新版本设置为活动版本:再次从左侧边栏中选择您的主数据模型文件,然后在右侧边栏中的第一个选项卡中,应该有一个“版本化数据模型”弹出菜单。

    这是非常重要的。要进行迁移,Core Data 需要创建旧存储时使用的模型版本,以及要迁移到的版本。如果您没有旧版本,迁移将失败。

    【讨论】:

    • 谢谢阿莫里亚。我有一个应用程序,我需要在以后的某个阶段添加一个实体。它目前没有版本,但如果我理解你的话,我应该在添加实体时添加一个版本。
    【解决方案2】:

    更改模型是一项艰巨的任务。理论上,只添加一个实体应该很容易,但 Apple 为该任务内置了一个迁移工具。 (这是为了防止您更改现有数据的结构)

    我之前迁移过 Core Data 数据库,但在 MAC OS 上,那是 2 年前的事了。

    这里是指南

    http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Introduction/Introduction.html

    【讨论】:

    • 谢谢。看起来非常吓人。如果我可以从一开始就设置实体并在以后的版本中填充它们,可能会更好。它们是视频播放列表,但现阶段我不知道标题。
    • 是的,我确保我的第一次迁移是我的最后一次 :) ...(除非有任何不可预见的数据需求)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多