xcode – 核心数据迁移:属性映射值表达式

xcode – 核心数据迁移:属性映射值表达式,第1张

概述我目前在我的实体上有一个cardType属性,在旧模型中可以是“Math”,“ Image”或“Text”.在新模型中,我将只使用“Math”和“Text”并且还具有hasImage属性,如果旧的cardType是Image(我想要更改为“Text”),我想将其设置为true. 最后,我有一组另一个实体,“卡片”,其中一个集合可以与一个套牌相关联,并且在每个实体中,我也将拥有hasImage,如果 我目前在我的实体上有一个cardType属性,在旧模型中可以是“Math”,“ Image”或“Text”.在新模型中,我将只使用“Math”和“Text”并且还具有hasImage属性,如果旧的cardType是Image(我想要更改为“Text”),我想将其设置为true.

最后,我有一组另一个实体,“卡片”,其中一个集合可以与一个套牌相关联,并且在每个实体中,我也将拥有hasImage,如果套牌为“我想要设置为真”图像“之前输入.

这是否可以使用我在两个版本之间创建的映射模型中的值表达式,还是我必须做其他事情?

我找不到任何文件告诉我究竟在Value Expression中有什么可能(Apple的doc – http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreDataVersioning/Articles/vmMappingOverview.html%23//apple_ref/doc/uid/TP40004735-SW3 – 只有一个非常简单的转换).如果我必须做别的事,会是什么?这看起来很简单,表达式应该能够做到.

解决方法 您可以做的一件事是创建一个自定义迁移策略类,该类具有将属性从原始值映射到新值的函数.例如,我有一个案例,我需要映射一个名为MyItems的实体,它与一组名为“Items”的值实体有直接关系,而是存储一个itemID,这样我就可以在多个商店中拆分模型.

旧模型看起来像这样:

新模型如下所示:

为此,我使用名为itemIDForItemname的函数编写了一个映射类,并将其定义为:

@interface Migration_Policy_v1tov2 : NSEntityMigrationPolicy {  NSMutableDictionary *namesToIDs;}- (NSNumber *) itemIDForItemname:(Nsstring *)name;@end

#import“Migration_Policy_v1tov2.h”

@implementation Migration_Policy_v1tov2    - (BOol)beginEntityMapPing:(NSEntityMapPing *)mapPing manager:(NSMigrationManager *)manager error:(NSError **)error {        namesToIDs = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:1],@"Apples",[NSNumber numberWithInt:2],@"Bananas",[NSNumber numberWithInt:3],@"Peaches",[NSNumber numberWithInt:4],@"Pears",[NSNumber numberWithInt:5],@"Beef",[NSNumber numberWithInt:6],@"Chicken",[NSNumber numberWithInt:7],@"Fish",[NSNumber numberWithInt:8],@"Asparagus",[NSNumber numberWithInt:9],@"Potato",[NSNumber numberWithInt:10],@"Carrot",nil];        return YES;    }    - (NSNumber *) itemIDForItemname:(Nsstring *)name {        NSNumber *ID = [namesToIDs objectForKey:name];        NSAssert(ID != nil,@"Error finding ID for item name:%@",name);        return ID;    }    @end

然后,对于映射模型中属性的相关映射名称,您可以将值表达式指定为函数调用的结果:FUNCTION($entityPolicy,“itemIDForItemname”,$source.name).您还必须将该属性的映射名称的自定义策略字段设置为映射类名称(在本例中为Migration_Policy_v1toV2).

总结

以上是内存溢出为你收集整理的xcode – 核心数据迁移:属性映射值表达式全部内容,希望文章能够帮你解决xcode – 核心数据迁移:属性映射值表达式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1037620.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存