• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 核心数据手动迁移

[复制链接]
菜鸟教程小白 发表于 2022-12-13 00:05:15 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试在我的项目中迁移到一个完全不同的新模型。对于轻量级迁移而言,这些更改太多了,我认为最好的方法是遍历顶级对象并自己设置所有属性和关系。

如何将迁移过程设置为像这样完全手动。我查看了似乎需要 NSMappingModel 的 NSMigrationManager。我见过的唯一示例和教程使用了我无法使用的 inferredMappingModelForSourceModel:destinationModel:error:,因为它无法推断映射模型。

我是否走在正确的道路上,如果是这样,我如何才能在代码中完全手动创建映射模型?感谢您的帮助。



Best Answer-推荐答案


如果您的模型更改使得您至少具有源和目标实体级别的映射(例如,您的旧模型中有一个 Vehicle 实体,现在您想将该数据迁移到 Car),那么您可以使用带有迁移策略的自定义映射模型。

该过程相当简单,在 Xcode 中,尝试将新的映射模型文件添加到您的项目中,选择源模型版本和目标模型版本。 Xcode 试图聪明地找出源实体和目标实体的属性之间的映射。如果不能,它会将映射留空,您可以设置自己的映射。

如果您想要在映射过程中做一些简单的赋值或空白或设置属性默认值以外的事情,请使用称为 NSEntityMigrationPolicy 的东西。创建您自己的子类并实现此方法来进行自定义映射:

- (BOOL)createDestinationInstancesForSourceInstanceNSManagedObject *)instance
                                      entityMappingNSEntityMapping *)mapping
                                            managerNSMigrationManager *)manager
                                              errorNSError **)error {
    NSArray *_properties = [mapping attributeMappings];
    for (NSPropertyMapping *_property in _properties) {
        if ([[_property name] isEqualToString"companyName"]) {
            NSExpression *_expression = [NSExpression expressionForConstantValue"10to1"];
            [_property setValueExpression:_expression];
        }
    }

    return [super createDestinationInstancesForSourceInstance:instance 
                                                entityMapping:mapping 
                                                      manager:manager 
                                                        error:error];
}

您可以阅读有关如何进行自定义迁移的更多信息 here .

关于ios - 核心数据手动迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24973577/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap