Изменение порядка отношения 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,

Упорядоченный набор имеет много применений, но в первую очередь это механизм сохранения порядка вставки. Поскольку вы хотите изменить порядок очередей, я предлагаю вам добавить свойство, которое будет содержать позицию в линейке, а затем отсортировать по этому порядку. (Вы также можете использовать это как свойство, чтобы легко вытащить состав из реестра, проверив ненулевые значения в свойстве состава.)

Эндрю

Другие вопросы по тегам