我有一个支持SQLite的核心数据存储,并希望使用NSFetchRequest
获取托管对象列表。我希望所述列表按布尔值排序,该值可以在数据库级别轻松计算。我知道这是因为可以使用NSPredicate
来制定相同的条件,如下所示:
[NSPredicate predicateWithFormat:@"uid = %@", currentUID]
可悲的是,似乎没有办法使用NSSortDescriptor
来制定这样的条件。我最好怎么做?我是否获取两个列表,一个带有
[NSPredicate predicateWithFormat:@"uid = %@", currentUID]
和一个
[NSPredicate predicateWithFormat:@"uid != %@", currentUID]
以后再合并?那么我还能优雅地使用NSFetchedResultsController
吗?
或者我应该获取所有项目并在以后的代码中对它们进行排序?或者有什么我错过的。
答案 0 :(得分:0)
只需创建一个NSSortDescriptors
的数组(即使它只包含一个元素)来根据需要对结果进行排序。
您可以使用setSortDescriptors:
进行设置。
fetch可以同时处理谓词和排序。
答案 1 :(得分:-1)
你所要求的是没有意义的。
谓词用于选择应在一组结果中返回哪些对象。这是通过针对每个对象评估谓词来确定的,以查看谓词是否评估为YES
或NO
(二进制值,或2个可能值之一)。如果它的计算结果为YES
,则包含该对象。如果它的计算结果为NO
,则排除该对象。没有中间立场。
相比之下,排序描述符的计算结果为less than
,equal
或greater than
。换句话说,它是三元值(它可以是 3 之一)。没有办法用谓词表示三元值(因为谓词是二进制的),因此使用谓词作为排序描述符绝对没有意义。 API不允许它,因为 logic 不允许它。
所以真正的问题是:你想做什么?为什么您认为在排序描述符中需要谓词?