Iphone 筛选器NSFetchedResultsController是否为零值?

Iphone 筛选器NSFetchedResultsController是否为零值?,iphone,cocoa,cocoa-touch,core-data,Iphone,Cocoa,Cocoa Touch,Core Data,我有一个NSFetchedResultsController,它从NSManagedObjectContext获取对象 这些对象有一个lastOpen属性,该属性最初为nil,仅在查看时设置 我希望我的UITableView显示最近打开的对象的列表,我可以通过向NSFetchRequest添加nssortddescriptor来实现这一点 问题: 我不想展示那些从未被研究过的物体。(lastOpen==nil)我可以通过相同的NSFetchRequest对其进行排序吗?有没有更好的方法来过滤数据

我有一个
NSFetchedResultsController
,它从
NSManagedObjectContext
获取对象

这些对象有一个
lastOpen
属性,该属性最初为
nil
,仅在查看时设置

我希望我的
UITableView
显示最近打开的对象的列表,我可以通过向
NSFetchRequest
添加
nssortddescriptor
来实现这一点

问题:

我不想展示那些从未被研究过的物体。(
lastOpen==nil
)我可以通过相同的
NSFetchRequest
对其进行排序吗?有没有更好的方法来过滤数据

谢谢。

试试这个:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"lastOpened != nil"];
... // add sort descriptors etc.

然后将提取请求添加到
NSFetchResultsController

中。你要找的是一份工作。基本上,它允许您指定要获取的对象满足的一个或多个条件,然后只获取与这些条件匹配的对象

然而,构建谓词是一个有点棘手的命题——您可能需要看一下入门指南。对于您的特殊情况,它甚至更为复杂,因为我不确定是否存在谓词项中nil值的表示形式。但是,您可以通过使用遥远过去的某个日期来解决此问题:

这将创建一个谓词,只允许返回具有设置日期(1970年1月1日之后的任何日期)的对象。然后,在执行fetch请求之前,将谓词添加到该请求中:

// Assuming you have some almost-ready NSFetchRequest *request:
[request setPredicate:predicate];

对于Swift,您可以使用布尔值初始化NSPredicate以始终返回true,这实际上是一个不过滤任何内容的过滤器

return fetchedResultsController("Terminal", withFilter: NSPredicate(value: true), sortColumns: sortColumns, sortDirections: sortDirections)

这太棒了。我有预感谓词也参与其中。谢谢
// Assuming you have some almost-ready NSFetchRequest *request:
[request setPredicate:predicate];
return fetchedResultsController("Terminal", withFilter: NSPredicate(value: true), sortColumns: sortColumns, sortDirections: sortDirections)