6

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

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

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

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

我只希望查询返回 John, Betty。诸如“从表中选择唯一名称,标识符”之类的东西。

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

4

2 回答 2

10

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

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

假设名称在name属性中。

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

您可以在 Key Value Coding Guide 的集合运算符部分中找到有关@distinctUnionOfObjects(和其他集合运算符)的更多信息。

于 2009-12-11T17:50:36.023 回答
9

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

于 2009-12-11T06:03:16.837 回答