2011-03-28 44 views
0

如果我有一個對象和設置如:如何對已知對象的NSArray進行排序,以確保FIRST記錄等於已知對象?

MyObject *objectOne = ....; 

NSArray *arrayOfMyObjects = [self.someObject [email protected]"myObjects"] allObjects]; 

其中valueForKey = @「對象」是myObject的類型的一個的NSMutableSet,

如何準確我用排序,以確保(或在最少嘗試確保)objectOne等於
[arrayOfMyObjects objectAtIndex:0]

基本上確保NSArray的第一個對象等於我已知的對象? 這是爲了UITableView的目的,並確保最上面的記錄是objectOne何時加載?

我猜想有一些排序描述符需要欺騙,但不太確定語法?

謝謝!

回答

0

你可以使用一個比較塊,以確保它是第一:

MyObject *objectOne; 
NSArray *array = [[self.someObject valueForKey:@"myObjects"] allObjects]; 
NSArray *sortedArray = [array sortedArrayUsingComparator:^(id obj1, id obj2) { 
    if(obj1 == objectOne) return (NSComparisonResult)NSOrderedAscending; 
    if(obj2 == objectOne) return (NSComparisonResult)NSOrderedDescending; 
    return (NSComparisonResult)NSOrderedSame; 
}]; 

類型轉換的回報率是消除不正確的參數類型的編譯器警告。 NSOrdered...的類型爲enum _NSComparisonResult,並且該方法期望NSComparator,其定義爲NSComparisonResult ^(id obj1, id obj2),但NSComparisonResultenum _NSComparisonResult不相同。

+0

試過用這個。似乎沒有做這項工作? NSOrderedAscending或NSOrderedDescending的返回到底是什麼?這是說要將物體向上或向下移動嗎? – 2011-03-29 15:56:24

+0

將前兩個返回值更改爲NSOrderedDescending即可完成工作! – 2011-03-29 16:02:39

+0

@Straddle我以爲NSOrderedAscending意味着obj1應該在obj2之前,但也許我倒退了。你有沒有嘗試過第二次上升?他們不應該是一樣的。 – ughoavgfhw 2011-03-29 18:16:57

相關問題