您可以使用 NSPredicate 指定“从...中选择唯一名称”吗?
Posted
技术标签:
【中文标题】您可以使用 NSPredicate 指定“从...中选择唯一名称”吗?【英文标题】:Can you specify "select unique name from ..." with NSPredicate? 【发布时间】:2009-12-11 05:47:18 【问题描述】:我在 Core Data 中存储了一些数据,如下所示:
|姓名 |标识符 |其他的东西|
我需要在 UITableView 中显示名称,但我只想显示具有唯一名称-标识符对的名称。所以对于:
John | 3 | foo
Betty | 4 | foo
Betty | 4 | bar
我只希望查询返回 John,Betty。类似于“从表中选择唯一名称、标识符”。
使用 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:]
。
【讨论】:
以上是关于您可以使用 NSPredicate 指定“从...中选择唯一名称”吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NSFetchedRequest 或 NSPredicate 从实体中选择所有行?