2010-03-22 55 views
4

我有一个核心的基于数据的应用程序,管理汽车经销商的记录。每个记录存储经销商的地址,该地址分为addressLine1,addressLine2,city,statezip组件,每个组件存储为数据存储中的一个字符串。核心数据的唯一值

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

我会知道如何用SQL查询轻松完成此任务,但是(如何)在Core Data中完成这项工作?

非常感谢!

回答

5

你说得对,Core Data不是一个“简单”的方法,因为Core Data不是数据库。但是,这是可能的。总体思路如下:

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

一个快速的方式,以确保一个独特的一套东西是用的NSSet。一旦你对城市的查询结果把你的NSArray并做

NSSet* uniqueResults = [NSSet setWithArray:resultsArray]; 

您可以将设定为另一个集合类,如果更方便,或只是对象枚举做所有这些事情。我不知道这种方法或Dave DeLong的valueForKeyPath方法是否更有效。

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?