1

我需要迁移我的核心数据模型以用正常的关系替换有序关系以支持 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 类别来记录对象。

4

2 回答 2

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
于 2013-04-07T10:18:23.707 回答
0

第一个想法:尝试使用另一个名称(不是index)。好像有特殊的意义。怎么样sequence

第二个想法:做一个两步迁移。

在中间步骤中,您只需添加索引。您遍历所有有序集并设置索引并保存。然后您进行第二次迁移,完全消除有序集。

应该有一个多存储策略,您可以使用它来确保安全,如果出现问题,可以返回旧数据或临时数据。

于 2013-04-06T21:28:42.097 回答