我需要迁移我的核心数据模型来替换正常的有序关系以支持iCloud。我已经创建了一个映射模型,并尝试通过添加新属性“index”并使用“ FUNCTION($source.project.tasks, "indexOfObject:" , $source)
”来维护订单,以获取旧索引。 ($ source.project.tasks应该是一个有序集。我的实体“Project”和“Tasks”之间的关系如下所示:tasks< - >> project)不幸的是,这不起作用。应用程序在启动时崩溃(EXC_BAD_ACCESS)。
我不确定这是不是正确的方法。有没有办法让我的方法有效?还是有更好的方法?
编辑: $ source.project.tasks返回错误错误消息:
Relationship 'tasks' fault on managed object (0x1019f9130)
我使用方法“indexOfTask:”创建了一个NSManagedObject类别来记录对象。
答案 0 :(得分:1)
我找到了一个解决方案:FUNCTION(...)
使用的所有方法都需要返回一个id值,所以我为NSManagedObject创建了一个类别并添加了这个方法:
- (NSNumber *)getIndexOfTask {
NSUInteger index = [(NSOrderedSet *)[[(CTask *)self project] tasks] indexOfObject:self];
if (index == NSNotFound)
return @0;
else
return [NSNumber numberWithInteger:index];
}
此方法将索引作为NSNumber返回,并可由FUNCTION(...)
使用:
FUNCTION($source, "getIndexOfTask").intValue
答案 1 :(得分:0)
第一个想法:尝试使用其他名称(不是index
)。它看起来有特殊意义。 sequence
怎么样?
第二个想法:执行两步迁移。
在临时步骤中,您只需添加索引。您遍历所有有序集并设置索引并保存。然后你进行第二次迁移,完全取消有序集。
(应该有一个多商店策略,您可以使用它来保证安全,并在出现问题时返回旧版或临时数据。)