代码之家  ›  专栏  ›  技术社区  ›  James Moore

可以用nspredicate指定“select unique name from…”吗?

  •  6
  • James Moore  · 技术社区  · 16 年前

    我有一些数据存储在核心数据中,看起来像:

    |名称标识符其他东西|

    我需要在uitableview中显示名称,但我只想显示具有唯一名称标识符对的名称。因此:

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

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

    使用nspredicate执行此操作的任何方法,或者我需要将重复数据消除字段倒入另一个容器中,然后对其进行搜索吗?

    2 回复  |  直到 14 年前
        1
  •  10
  •   Barry Wark    14 年前

    核心数据是 对象 恰好(可选)将对象图持久化到sql持久化存储的图形管理框架。无法查询对象属性,只能查询对象。然后,可以从结果数组中查询实例:

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

    假设名字在 name 财产。

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

    你可以找到更多关于 @distinctUnionOfObjects (和其他收集运算符)在 Collection Operators 键值编码指南的一节。

        2
  •  9
  •   Dave DeLong    16 年前

    因为这是核心数据,请查看 -[NSFetchRequest setReturnsDistinctObjects:] .