多対 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"];
それでも、2回目にプレイヤー名を出力すると、以前とまったく同じ結果が得られます! メソッドに渡す NSArray (batsmenArray) が *battingLineUpTemp と同じ順序ではないことを確認しました...この NSMutableOrderedSet の順序を変更することをコードが拒否しているのはなぜですか!? CoreData が再びお尻に大きな苦痛を与えているのでしょうか?
編集 1 また、for ループ内の NSLogging によって、置き換えているオブジェクトと置き換えているオブジェクトが異なることを確認しました... NSMutableOrderedSet は単に再配置を拒否しています!