2013-04-06 68 views
1

我需要迁移我的核心数据模型,以便使用正常的替代有序关系来支持iCloud。我创建了一个映射模型,并试图通过添加一个新的属性“index”并使用“”来获取旧索引以维持顺序。 ($ source.project.tasks应该是一个有序集合,我的实体“Project”和“Tasks”之间的关系如下所示:tasks < - >> project)不幸的是,这不起作用。该应用在启动时崩溃(EXC_BAD_ACCESS)。在核心数据映射模型的值表达式中使用“indexOfObject:”

我不确定这是否正确。有没有办法让我的方法奏效,还是有更好的方法?

Mapping Model

编辑: $ source.project.tasks返回故障错误消息: Relationship 'tasks' fault on managed object (0x1019f9130)

我创建了一个NSManagedObject类与方法 “indexOfTask:” 登录的对象。

回答

0

我已经找到了解决办法:通过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 
0

第一个想法:尝试使用其他名称(不是index)。看起来它有一个特殊的含义。 sequence怎么样?

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

在临时步骤中,您只需添加索引即可。您遍历所有有序集并设置索引并保存。然后你完成第二次迁移,完全排除有序集。

应该有多个商店的策略,如果出现问题,您可以使用是在安全方面,回到旧的或临时数据

+0

更改名称并没有帮助。我也发现,“.project.tasks”返回一个错误。我不确定它为什么会这样做,但我相信我的方法可行,如果这是固定的。 – WetFish 2013-04-06 22:54:36