1

我正在尝试以多对一的有序 ​​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 只是拒绝重新排列!

4

1 回答 1

0

西蒙桑珀,

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

安德鲁

于 2013-06-24T12:49:20.047 回答