我有一些数据存储在核心数据中,看起来像:
| 姓名 | 标识符 | 其他东西 |
我需要在 UITableView 中显示名称,但我只想显示具有唯一名称标识符对的名称。因此对于:
John | 3 | foo
Betty | 4 | foo
Betty | 4 | bar
我只希望查询返回 John, Betty。诸如“从表中选择唯一名称,标识符”之类的东西。
使用 NSPredicate 有什么方法可以做到这一点,还是我需要将重复数据删除的字段倒入另一个容器中,然后搜索?
我有一些数据存储在核心数据中,看起来像:
| 姓名 | 标识符 | 其他东西 |
我需要在 UITableView 中显示名称,但我只想显示具有唯一名称标识符对的名称。因此对于:
John | 3 | foo
Betty | 4 | foo
Betty | 4 | bar
我只希望查询返回 John, Betty。诸如“从表中选择唯一名称,标识符”之类的东西。
使用 NSPredicate 有什么方法可以做到这一点,还是我需要将重复数据删除的字段倒入另一个容器中,然后搜索?
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
(和其他集合运算符)的更多信息。
由于这是核心数据,请查看-[NSFetchRequest setReturnsDistinctObjects:]
.