核心数据的独特价值

时间:2010-03-22 20:26:23

标签: iphone cocoa core-data

我有一个基于核心数据的应用程序,用于管理汽车经销商的记录。每条记录都存储了经销商的地址,该地址分为addressLine1addressLine2citystatezip组件,每个组件都存储为数据存储。

我想向用户展示一个有经销商的城市列表,所以我想弄清楚是否可以获得已输入的每个唯一城市名称的列表进入商店。换句话说,是否有可能针对将返回不同城市名称列表的所有经销商记录发出某种查询?

我知道如何使用SQL查询轻松完成此操作,但(如何)在Core Data中完成此操作?

非常感谢!

3 个答案:

答案 0 :(得分:7)

核心数据可以选择获取不同的记录。不建议使用NSArray和NSSets获取唯一结果的方法。

[fetchRequest setResultType:NSDictionaryResultType];
NSDictionary *entityProperties = [entity propertiesByName];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:[entityProperties objectForKey:@"<<yourattrib>"]]];
[fetchRequest setReturnsDistinctResults:YES];

参考Apple documentation并查看How to fetch distinct values in Core Data?

的答案

答案 1 :(得分:5)

你是对的,使用Core Data没有“简单”的方法,因为Core Data不是数据库。但是,这是可能的。这是一般的想法:

  1. 通过NSFetchRequest获取所有经销商对象。要简化查询,您可以将获取请求设置为仅提取city属性。
  2. 执行NSArray * uniqueCities = [fetchedDealers valueForKeyPath:@"@distinctUnionOfObjects.city"];

答案 2 :(得分:0)

确保一组独特事物的快速方法是使用NSSet。获得有关城市的查询结果后,请使用NSArray并执行

NSSet* uniqueResults = [NSSet setWithArray:resultsArray];

如果更方便,您可以将集合转换为另一个集合类,或者只是将对象枚举器转换为对所有集合执行某些操作。我不知道这种方法或Dave DeLong的valueForKeyPath方法是否更有效。