Изменение порядка отношения CoreData 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 Я также убедился, что объект, который я заменяю, и объект, который он заменяет, различаются при помощи NSLogging в цикле for... NSMutableOrderedSet просто отказывается переставлять!
1 ответ
SimonThumper,
Упорядоченный набор имеет много применений, но в первую очередь это механизм сохранения порядка вставки. Поскольку вы хотите изменить порядок очередей, я предлагаю вам добавить свойство, которое будет содержать позицию в линейке, а затем отсортировать по этому порядку. (Вы также можете использовать это как свойство, чтобы легко вытащить состав из реестра, проверив ненулевые значения в свойстве состава.)
Эндрю