Mic*_*ich 2 iphone cocoa cocoa-touch core-data
我有一个NSFetchedResultsController
从a获取对象NSManagedObjectContext
.
这些对象具有一个lastOpened
属性,该属性最初nil
只在查看时设置.
我希望我UITableView
显示最近打开的对象列表,我可以通过添加一个NSSortDescriptor
来完成NSFetchRequest
.
题:
我不想显示从未研究过的对象.(lastOpened == nil
)我可以通过相同的方式对此进行排序NSFetchRequest
吗?有没有更好的方法来过滤数据?
谢谢.
绝对.您正在寻找的是NSPredicate.基本上,它允许您指定希望获取的对象满足的一个或多个条件,然后仅提取与这些条件匹配的对象.
然而,构建谓词是一个稍微棘手的命题 - 您可能需要查看谓词格式字符串语法指南才能开始.对于你的特殊情况,它甚至更棘手,因为我不确定在谓词术语中是否有nil值的表示.但是,你可以通过在遥远的过去使用一些日期来解决这个问题:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastOpened > %@",
[NSDate dateWithTimeIntervalSince1970:0]];
Run Code Online (Sandbox Code Playgroud)
您可以直接在谓词中检查nil:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastOpened != nil"];
Run Code Online (Sandbox Code Playgroud)
这将创建一个谓词,该谓词仅允许返回具有设置日期(1970年1月1日之后的任何内容)的对象.然后,在执行之前,将谓词添加到获取请求中:
// Assuming you have some almost-ready NSFetchRequest *request:
[request setPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
试试这个:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"lastOpened != nil"];
... // add sort descriptors etc.
Run Code Online (Sandbox Code Playgroud)
然后将获取请求添加到NSFetchResultsController
.
归档时间: |
|
查看次数: |
4159 次 |
最近记录: |