你能用NSPredicate指定“从......中选择唯一的名字”吗?

时间:2009-12-11 05:47:19

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

我在Core Data中存储了一些类似于:

的数据

|名字|标识符| other_stuff |

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

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

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

使用NSPredicate做任何事情,或者我是否需要将去掉的字段倒入另一个容器中,然后搜索它?

2 个答案:

答案 0 :(得分:10)

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

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

假设名称位于name属性中。

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

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

答案 1 :(得分:9)

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