Core Data 的独特价值
Posted
技术标签:
【中文标题】Core Data 的独特价值【英文标题】:Unique Values from Core Data 【发布时间】:2010-03-22 20:26:22 【问题描述】:我有一个基于核心数据的应用程序,用于管理汽车经销商的记录。每条记录存储经销商的地址,该地址分为addressLine1
、addressLine2
、city
、state
和zip
组件,每个组件都以字符串形式存储在数据存储中。
我想向用户展示一个有经销商的城市列表,所以我试图弄清楚是否有可能获得一个已输入的每个唯一城市名称的列表进店。换句话说,是否可以针对所有经销商记录发出某种查询,以返回不同城市名称的列表?
我知道如何使用 SQL 查询轻松完成此操作,但是(如何)在 Core Data 中完成此操作?
非常感谢!
【问题讨论】:
【参考方案1】:Core Data 可以选择获取不同的记录。不推荐使用 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? 的答案
【讨论】:
【参考方案2】:你说得对,Core Data 没有“简单”的方法来做到这一点,因为 Core Data 不是数据库。但是,这是可能的。大致思路如下:
-
通过
NSFetchRequest
获取您的所有经销商对象。为了简化查询,您可以将获取请求设置为仅获取 city
属性。
执行NSArray * uniqueCities = [fetchedDealers valueForKeyPath:@"@distinctUnionOfObjects.city"];
【讨论】:
【参考方案3】:确保一组独特事物的快速方法是使用 NSSet。一旦你得到关于 city 的查询结果,就拿你的 NSArray 做
NSSet* uniqueResults = [NSSet setWithArray:resultsArray];
如果更方便的话,您可以将集合转换为另一个集合类,或者只是对象枚举器对它们进行处理。我不知道这种方法还是 Dave DeLong 的 valueForKeyPath 方法更有效。
【讨论】:
以上是关于Core Data 的独特价值的主要内容,如果未能解决你的问题,请参考以下文章