2013-06-23 41 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的巨大痛苦?

編輯1 我也確信,我替換的對象和它替換的一個內部的for循環...的NSMutableOrderedSet被簡單地拒絕被重新排布不同的NSLogging!

回答

0

SimonThumper,

的有序集合有很多用途,但它主要是爲了保持插入順序的機制。如果您想要更改陣容順序,我建議您實際添加一個屬性以包含陣容中的位置,然後按照該順序進行排序。 (你也可以使用它作爲一個屬性來輕鬆地通過檢查在陣容財產非零值拉陣容出來名冊。)

安德魯

+1

這種-的,回答我的問題,所以謝謝非常!我只是將battingLineUpTemp更改爲NSMutableArray,並將每個玩家從battingOrderToChange.battingOrder添加到循環中,然後重新排序該NSMutableArray,並通過使用方法初始化NSOrderedSet來設置CoreData屬性,而不是添加另一個屬性來包含位置'orderedSetWithArray:' – simonthumper

+0

很高興我能幫忙。由於看起來我回答了您的問題,您是否介意選擇綠色複選標記來接受此答案?謝謝你,並繼續與你的項目運氣,安德魯 – adonoho

+0

當然,對不起,延遲!一直很忙!硅錳 – simonthumper