【问题标题】:Can you specify "select unique name from ..." with NSPredicate?您可以使用 NSPredicate 指定“从...中选择唯一名称”吗?
【发布时间】:2009-12-11 05:47:18
【问题描述】:

我在 Core Data 中存储了一些数据,如下所示:

|姓名 |标识符 |其他的东西|

我需要在 UITableView 中显示名称,但我只想显示具有唯一名称-标识符对的名称。所以对于:

John | 3 | foo
Betty | 4 | foo
Betty | 4 | bar

我只希望查询返回 John,Betty。类似于“从表中选择唯一名称、标识符”。

使用 NSPredicate 有什么方法可以做到这一点,还是我需要将重复数据删除的字段倒入不同的容器中,然后在上面搜索?

【问题讨论】:

    标签: iphone cocoa cocoa-touch core-data nspredicate


    【解决方案1】:

    Core Data 是一个 object 图管理框架,它恰好(可选地)将该对象图持久保存到 SQL 持久存储中。无法查询对象属性,只能查询对象。然后,您可以从结果数组中查询实例:

    NSArray *instances; //from -[NSManagedObject executeFetchRequest:error:]
    NSArray *uniqueNames = [instances valueForKeyPath:@"@distinctUnionOfObjects.name"];
    

    假设名称在 name 属性中。

    如果您希望每个用户拥有一个名称、一个 id 和多个 {foo,bar,...},那么您应该将这种情况建模为具有名称和 id 以及一对多关系的用户实体到一个代表 foo/bar/etc 的实体。

    您可以在键值编码指南的Collection Operators 部分找到有关@distinctUnionOfObjects(和其他集合运算符)的更多信息。

    【讨论】:

      【解决方案2】:

      由于这是核心数据,请查看-[NSFetchRequest setReturnsDistinctObjects:]

      【讨论】:

        猜你喜欢
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-01
        • 1970-01-01
        相关资源
        最近更新 更多