通过谓词对NSFetchRequest进行排序

时间:2011-02-17 11:40:16

标签: cocoa core-data nspredicate nsfetchrequest nssortdescriptor

我有一个支持SQLite的核心数据存储,并希望使用NSFetchRequest获取托管对象列表。我希望所述列表按布尔值排序,该值可以在数据库级别轻松计算。我知道这是因为可以使用NSPredicate来制定相同的条件,如下所示:

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

可悲的是,似乎没有办法使用NSSortDescriptor来制定这样的条件。我最好怎么做?我是否获取两个列表,一个带有

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

和一个

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

以后再合并?那么我还能优雅地使用NSFetchedResultsController吗? 或者我应该获取所有项目并在以后的代码中对它们进行排序?或者有什么我错过的。

2 个答案:

答案 0 :(得分:0)

只需创建一个NSSortDescriptors的数组(即使它只包含一个元素)来根据需要对结果进行排序。

您可以使用setSortDescriptors:进行设置。

fetch可以同时处理谓词和排序。

答案 1 :(得分:-1)

你所要求的是没有意义的。

谓词用于选择应在一组结果中返回哪些对象。这是通过针对每个对象评估谓词来确定的,以查看谓词是否评估为YESNO(二进制值,或2个可能值之一)。如果它的计算结果为YES,则包含该对象。如果它的计算结果为NO,则排除该对象。没有中间立场。

相比之下,排序描述符的计算结果为less thanequalgreater than。换句话说,它是三元值(它可以是 3 之一)。没有办法用谓词表示三元值(因为谓词是二进制的),因此使用谓词作为排序描述符绝对没有意义。 API不允许它,因为 logic 不允许它。

所以真正的问题是:你想做什么?为什么您认为在排序描述符中需要谓词?