2012-12-14 65 views
4

我又陷入另一個問題,但經過很長時間。使用NSSortDescriptor排序編號

這次我有數據庫(核心數據),有一個屬性numbers其中包含像213879,123,4,345,56567等整數。

我需要按照類似於alphabetically的順序以升序編號順序獲取數據。

我在下面給出的方式這樣做,

fetchRequest.sortDescriptors=[NSArray arrayWithObject: 
     [NSSortDescriptor sortDescriptorWithKey:@"numbers" 
            ascending:YES 
            selector:@selector(compare:)]]; 

,但不幸的是它僅僅比較每個數字的第1位,意味着如果有2個號碼,如123321,它將比較1 (first digit of first number)3 (first digit of second number)和整理它們。

當到達時,它會混淆123111(所有數字的第一個數字相同)。

如果我做錯了什麼或者SortDescriptor以這種方式工作? 我需要解決方案來按照升序123,133,213,451,516同樣對數字進行排序。

一點要記住 在實際屬性numbers將包含具有整數位數多於6 e.g 1234567,234568,235481

感謝所有誰幫助了我很多期待。

+1

第一反應是,你是比較字符串,但現在你說這是NSNumber的,我建議你重新檢查由[obj className]它是說NSNumber或NSString –

+0

請告訴你數據模型。如果這是一個數字屬性,它不會像這樣工作。你的問題有一些缺失。 – jrturton

回答

3

看起來您的屬性屬於NSString類型。確保你將它做到NSNumber,然後排序將按預期工作。

在排序描述符中沒有必要使用selector:@selector(compare:),因爲這是默認設置。

+0

感謝您的重播。該屬性的類型爲「NSNumber」。 – iOmi

+0

請將您的問題修改爲:(1)顯示不希望的排序結果示例,以及(2)用於存儲屬性值的代碼。 – Mundi

+0

::感謝哥們,它工作得很好。在我的Numbers中實際存在一些錯誤,導致了問題。我修復了這些數字並應用了您的解決方案,對我來說它工作得很好。再次感謝。 – iOmi

0
[NSSortDescriptor sortDescriptorWithKey:@"self" 
           ascending:YES 
          comparator:^(id obj1, id obj2){ 
    return [(NSString*)obj1 compare:(NSString*)obj2 
          options:NSNumericSearch]; 
}]; 

對我來說這是工作的罰款 完美

+0

問題是當你有SQLite存儲你不能在NSSortDescriptor中使用比較器... –

9

試試這個:

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc]initWithKey:@"rank" ascending:YES selector:@selector(localizedStandardCompare:)]; 
+2

+1,'localizedStandardCompare'適用於在NSArray中使用NSSortDescriptor進行數字排序。 – NAZIK

+0

它爲我工作。非常感謝。 – RXGangam

+0

我不明白爲什麼,但我有一個屬性'@property(strong,nonatomic)NSNumber * price;'我用(即)object.price = @(5727)設置了這個屬性。如果我檢查if([[object price] isKindOfClass:[NSString class]]) - 這是真的。 – WildMassacre

相關問題