2013-05-25 116 views
0

我想按符號排序數據。在SQLite函數中,「sign」工作正常。但在覈心數據中,我不能重複這一點。我tryed這一點:核心數據符號排序描述符

NSSortDescriptor* signSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:NO comparator:^NSComparisonResult(NSNumber* obj1, NSNumber* obj2) { 
     int val1 = sign([obj1 integerValue]); 
     int val2 = sign([obj2 integerValue]); 
     return (val1 < val2) ? NSOrderedAscending : (val1 > val2) ? NSOrderedDescending : NSOrderedSame; 
    }]; 
    fetchRequest.sortDescriptors = @[signSortDescriptor]; 

在iOS 6.1不工作(錯誤:「不支持NSSortDescriptor(比較塊不支持)」),罰款的iOS 5.1(我認爲它得到的結果數組排序後,但不知道)

Tryed這樣的:

NSSortDescriptor* signSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"sign(id)" ascending:NO]; 
    fetchRequest.sortDescriptors = @[signSortDescriptor]; 

,但得到錯誤...

+0

你怎麼試過這個:http://stackoverflow.com/questions/12800062/nssortdescriptor-issue –

回答

0

你並不需要通過簽署一項特別的比較。 如果idNSNumber,只需按id對值進行排序。他們也將按照符號排序,我不認爲會有性能影響。

+0

我有複雜的排序描述符。首先按符號id遞減排序,次絕對遞增排序。例如:3 4 7 0 -2 -5 -10。我可以簡單地解決我的問題,但我想知道如何在數據庫中做符號排序。 – Sk0prion

+0

@ Sk0prion:您無法使用基於Objective-C的排序描述符來執行Core Data提取請求。只允許持久屬性和某些比較函數(請參閱http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/CoreData/Articles/cdPersistentStores.html#//apple_ref/doc/uid/TP40002875- SW11)。如果你需要一個特殊的排序順序,你將不得不添加另一個暗示這個順序的屬性 - 或者在獲取這些對象之後在內存中排序。 –