更改NSMutableOrderedSet核心数据关系的顺序

时间:2013-06-23 15:57:01

标签: objective-c core-data nsmutableorderedset

我正在尝试以多对一的有序CoreData关系替换对象...我的代码在这里:

NSMutableOrderedSet *battingLineUpTemp = [battingOrderToChange.battingOrder mutableCopy];
    NSUInteger newBatsmanIndex = 0;

NSLog(@"Original batting order");
for (CricketPlayer *p in battingLineUpTemp) {
    NSLog(@"switching : %@ %@",p.firstName, p.lastName);
}

for (int i = [innings.wicketsFallen integerValue] +2; i < [battingOrderToChange.battingOrder count]; i++) {

    //[battingLineUpTemp replaceObjectAtIndex:i withObject:batsmenArray[newBatsmanIndex]];
    [battingLineUpTemp replaceObjectAtIndex:i withObject:[batsmenArray objectAtIndex:newBatsmanIndex]];
    newBatsmanIndex++;

}

NSLog(@"Changed batting order");
for (CricketPlayer *p in battingLineUpTemp) {
    NSLog(@"switching : %@ %@",p.firstName, p.lastName);
}


[battingOrderToChange willChangeValueForKey:@"battingOrder"];
[battingOrderToChange setBattingOrder:[[NSOrderedSet alloc] initWithOrderedSet:[battingLineUpTemp copy]]];
battingOrderToChange.battingOrder = battingLineUpTemp;
[battingOrderToChange didChangeValueForKey:@"battingOrder"];

然而,第二次输出球员名字时,我得到了与之前完全相同的结果!我确保我传递给方法的NSArray(batsmenArray)与* battingLineUpTemp的顺序不一样...为什么我的代码拒绝让我改变这个NSMutableOrderedSet的顺序!?是不是CoreData再一次成为了一个巨大的痛苦?

修改1 我还确保我正在替换的对象和它正在替换的对象在for循环中的NSLogging不同...... NSMutableOrderedSet只是拒绝重新排列!

1 个答案:

答案 0 :(得分:0)

SimonThumper,

有序集有许多用途,但它主要是一种保留插入顺序的机制。由于您想要更改阵容顺序,我建议您实际添加一个属性以包含阵容中的位置,然后对该顺序进行排序。 (你也可以使用它作为属性,通过检查阵容属性中的非零值,轻松地将阵容从名单中拉出来。)

安德鲁