代码之家  ›  专栏  ›  技术社区  ›  Michael Grinich

筛选未保存的结果控制器是否为零?

  •  2
  • Michael Grinich  · 技术社区  · 17 年前

    我有一个 NSFetchedResultsController 从一个 NSManagedObjectContext .

    这些对象具有 lastOpened 属性,最初是 nil 仅在查看时设置。

    我想要我的 UITableView 要显示最近打开的对象的列表,我可以通过添加 NSSortDescriptor NSFetchRequest .

    问题:

    我不想显示从未研究过的对象。( lastOpened == nil )我能用同样的方法分类吗 NSFDET请求 ?有没有更好的方法来过滤数据?

    谢谢。

    3 回复  |  直到 9 年前
        1
  •  8
  •   Tim    17 年前

    当然。你要找的是 NSPredicate . 基本上,它允许您指定一个或多个您希望获取的对象满足的条件,然后只获取符合这些条件的对象。

    然而,构建谓词是一个稍微复杂的命题-您可能需要查看 Predicate Format String Syntax 入门指南。 对于您的特定情况,这甚至更棘手,因为我不确定谓词中是否存在nil值的表示。但是,您可以通过使用遥远过去的某个日期来绕过这一点:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastOpened > %@",
                              [NSDate dateWithTimeIntervalSince1970:0]];

    您可以直接在谓词中检查nil:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastOpened != nil"];

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

    // Assuming you have some almost-ready NSFetchRequest *request:
    [request setPredicate:predicate];
        2
  •  5
  •   diederikh    17 年前

    试试这个:

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

    然后将提取请求添加到 NSFetchResultsController .

        3
  •  0
  •   Matthew Barker    9 年前

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

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