我发现文档非常有限,我的问题解决方案无处可寻。核心数据版本控制和自定义策略迁移
我需要添加新的实体(与现有的关系)。还要添加和重命名现有实体的一些属性。
Lightweighted例如:
旧模型具有一个属性name
一个实体Item
。
在新模型中,我想要Item
有一个新属性dateAdded
并将其重命名为name
至title
。在这一点上,如果dateAdded
将是可选的或给定的默认值,我可以使用轻量级迁移功能。纠正我,如果我错了。
但我也想增加新的List
实体与title
属性。并添加多对多关系。列表可以是空的或有许多项目。项目必须提及一个列表。
所以我很困惑我所做的一切和顺序。
禁用轻量级迁移功能(
NSDictionary* options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:NO], NSInferMappingModelAutomaticallyOption, nil];
),启用迁移。创建一个新版本的模型。在那里我做了我想要的改变。
创建一个新的映射模型。来源是旧模型,目标是新模型。在
ItemToItem
中,我将title
设置为$source.name
。
除了Xcode仍在使用映射模型时崩溃,我不知道接下来要做什么。我认为我必须在上下文中创建List
的一个实例,并根据关系策略将所有项引用到它。而我应该使用自定义NSEntityMigrationPolicy
来做到这一点。任何帮助来完成这个挑战?
为什么轻量级需要禁用重量级?它为我工作。所以我的梦想代码是错的?! – khunshan