我正在尝试以多对一的有序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只是拒绝重新排列!
答案 0 :(得分:0)
SimonThumper,
有序集有许多用途,但它主要是一种保留插入顺序的机制。由于您想要更改阵容顺序,我建议您实际添加一个属性以包含阵容中的位置,然后对该顺序进行排序。 (你也可以使用它作为属性,通过检查阵容属性中的非零值,轻松地将阵容从名单中拉出来。)
安德鲁