2013-06-23 4 views
0

Я пытаюсь заменить объекты в многих отношениях один упорядоченный 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 серьезной болью в заднице еще раз?

Edit 1 Я также уверен, что объект, который я замена и один, который он заменяет разные по NSLogging внутри для цикла ... NSMutableOrderedSet просто отказывается переставить!

ответ

0

SimonThumper,

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

Эндрю

+1

Такого рода-оф-ответил на мою проблему так спасибо очень! Вместо добавления другого свойства, чтобы содержать позицию, я просто изменил battingLineUpTemp на NSMutableArray и добавил каждого игрока из battingOrderToChange.battingOrder к нему в цикле ... Затем я переупорядочил NSMutableArray и установил атрибут CoreData, инициировав NSOrderedSet, используя метод 'orderedSetWithArray:' – simonthumper

+0

Рад, что я мог бы помочь. Как мне кажется, я ответил на ваш вопрос, не могли бы вы принять этот ответ, выбрав зеленую галочку? Спасибо и продолжение Удача с вашим проектом, Андрей – adonoho

+0

Несомненно, извините за задержку! был занят! SiMn – simonthumper