2010-01-07 71 views
9

我正在使用NSSortDescriptor按升序對NSDate對象進行排序。但是,我需要沒有日期才能在列表的最底部,而現在他們在頂部。NSSortDescriptor和零值

回答

9

最後,我已經決定了具有零值是不是一個好主意,如果我想要的是零值出現在升序列表的底部,我應該將日期設置爲[NSDate distantFuture],然後在顯示它們之前檢查它。事實證明,這在應用程序中也具有更多的語義意義。

6

當然,我應該使用

initWithKey:ascending:selector: 

,寫我自己的比較選擇

+0

正是。你定製邏輯來處理nil值,然後調用[myNSDateInstance compare:secondDate];如果第二個日期不是零。 – 2010-01-07 17:40:59

+0

這不會有幫助,因爲'compare:'將被髮送到NSDate實例;如果'nil'結束接收者,結果將是'NSOrderedSame',並且如果接收者不是'nil'但是參數是,我不認爲任何特定的結果是有保證的。 – 2010-01-07 18:07:43

+0

不幸的是,當從核心數據提取時,這不起作用。 – pkamb 2015-08-07 23:44:22

7

看起來你已經有了一個解決方案,但對於其他人仍然使用無NSDates,並在底部,我使用下面的代碼,我排序降序,然後扭轉發送到對象的順序比較。

_sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"dueDate" 
               ascending:NO 
               comparator:^NSComparisonResult(id obj1, id obj2) { 
                return [obj2 compare:obj1]; 
               }]; 
+0

如果obj1爲零且obj2是日期,那麼比較是否沒有未定義的行爲? – 2014-12-16 21:52:43