3

我有一個SQLite支持的核心數據存儲並希望使用NSFetchRequest獲取管理對象列表。我希望所說的列表按照可以在數據庫級別輕鬆計算的布爾值進行排序。我知道這是因爲它能夠用於配製使用NSPredicate相同的條件下,這將如下所示:用謂詞對NSFetchRequest進行排序

[NSPredicate predicateWithFormat:@"uid = %@", currentUID] 

可悲的是,似乎沒有辦法制定使用NSSortDescriptor這樣的條件。我如何最好地解決這個問題?難道我取兩個列表,一個與

[NSPredicate predicateWithFormat:@"uid = %@", currentUID] 

和一個與

[NSPredicate predicateWithFormat:@"uid != %@", currentUID] 

,後來將它們結合起來?那麼我可以優雅地使用NSFetchedResultsController嗎?
或者我應該獲取所有項目並稍後在代碼中進行排序?或者有什麼我錯過了。

回答

-1

你要求的是沒有意義的。

謂詞用於選擇哪些對象應在一組結果中返回。這是通過評估針對每個對象的謂詞來確定謂詞是否計算爲YESNO(二進制值或2個可能值之一)。如果評估結果爲YES,則包含該對象。如果評估結果爲NO,則排除該對象。沒有迴旋的餘地。

相比之下,排序描述符評估爲less than,equalgreater than。換句話說,它是一個三元數的值(它可以是其中的一個東西)。沒有辦法用謂詞表達三元值(因爲謂詞是二元的),所以使用謂詞作爲排序描述符是絕對沒有意義的。該API不允許它,因爲邏輯不允許它。

所以真正的問題是:你想要做什麼?你爲什麼認爲在你的排序描述符中需要一個謂詞?

+1

好吧,我明白你來自哪裏,看到我的描述有點混亂。我不想使用謂詞對結果進行排序,我只是提到了它們,因爲它們提供了計算我想要對結果進行排序的值的功能。換句話說,我的謂詞匹配的所有結果應該在謂詞不匹配的結果之前出現;由單個對象的謂詞返回的布爾應該被排序描述符用來將它與另一個對象進行比較(從而產生你的三元結果)。我希望這使事情更清楚。 – 2011-02-18 00:13:39

0

只需創建一個數組(即使它只包含一個元素)NSSortDescriptors以根據需要對結果進行排序。

您可以使用setSortDescriptors:來設置它們。

fetch可以同時處理謂詞和排序。

+0

這不是我不知道如何設置多個`NSSortDescriptor`s。相反,我的問題是,簡而言之:我如何配置我的`NSSortDescriptor`來按表達式而不是靜態字段名進行排序? – 2013-03-09 12:00:14