【问题标题】:How to Fetch only Some Objects Matching a Bool Attribute如何仅获取与 Bool 属性匹配的某些对象
【发布时间】:2011-10-16 22:26:34
【问题描述】:

每次我从数据库中获取对象时,我都会得到所有对象。现在,我必须获取并在表格视图中仅显示存储在数据库中的一些对象。

为此,我考虑在我的实体中添加一个新属性,一个 BOOL 属性,这样我就可以根据情况仅获取该属性值等于 YES 或 NO 的对象。

有可能做这样的事情吗?

我发现 NSFetchRequest 类的 -setPropertiesToFetch: 方法很有用,但我不知道是否可以使用它来查看 BOOL 的不同值。

【问题讨论】:

    标签: iphone core-data properties boolean nsfetchrequest


    【解决方案1】:

    听起来您只想使用谓词。 NSPredicate Class Reference 提供了如何使用它们的好主意。基本上,它会为您的结果添加一个过滤器。例如,假设您有一个核心数据对象,其属性为 myBool,它是一个 BOOL(但存储为 NSNumber,当然)。要基于此过滤结果,您可以使用类似这样的方法

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"myBool == %@", [NSNumber numberWithBool:YES]];
    [fetchRequest setPredicate:predicate];
    

    然后照常继续。这将只返回 myBool 值为 YES 的结果。

    话虽如此,如果您使用请求来简单地填充 tableView,则最好使用NSFetchedResultsController。可以在 here 找到有关如何实现它的精彩教程。

    【讨论】:

    • +1 我要补充一点,您不必为了显示而将属性添加到数据模型中的实体。实体属性应密切模仿应用程序处理的真实世界对象、事件或条件的属性。例如,如果您的应用程序与人打交道并且您有一个Person 对象,那么您将有一个firstName 属性,但没有displayInThirdView 属性。第一个是真人的属性,但后者是不属于数据模型的实现细节。
    • 非常感谢...这很好用;)我必须更频繁地使用谓词:D
    猜你喜欢
    • 2015-04-18
    • 2016-04-15
    • 2010-11-11
    • 1970-01-01
    • 2019-06-22
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    相关资源
    最近更新 更多