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

Jam*_*ore 6 iphone cocoa cocoa-touch core-data nspredicate

我在Core Data中存储了一些数据,如下所示:

| 名字| 标识符| other_stuff |

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

John | 3 | foo
Betty | 4 | foo
Betty | 4 | bar
Run Code Online (Sandbox Code Playgroud)

我只希望查询返回John,Betty.像"从表中选择唯一名称,标识符"之类的东西.

用NSPredicate做任何方法,或者我需要将去掉的字段倒入另一个容器中,然后搜索一下?

Bar*_*ark 10

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

NSArray *instances; //from -[NSManagedObject executeFetchRequest:error:]
NSArray *uniqueNames = [instances valueForKeyPath:@"@distinctUnionOfObjects.name"];
Run Code Online (Sandbox Code Playgroud)

假设名称在name属性中.

如果你想要的是每个用户有一个名字,一个id和多个{foo,bar,...},那么你应该将情况建模为具有名称和id的用户实体以及与实体的多对多关系代表foo/bar/etc.

您可以@distinctUnionOfObjects在"键值编码指南" 的" 集合运算符"部分中找到有关(和其他集合运算符)的更多信息.


Dav*_*ong 9

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