CoreData 可以返回唯一的实体属性吗?

Posted

技术标签:

【中文标题】CoreData 可以返回唯一的实体属性吗?【英文标题】:Can CoreData return unique entity attributes? 【发布时间】:2013-02-08 21:51:44 【问题描述】:

假设我有一个具有名为 animalType 的属性的实体。 在核心数据中,我有 10,000 个这样的实体,并且有未知数量的不同动物类型,例如。狗、猫、鸟等 我可以告诉核心数据获取每种动物类型并返回类似于以下内容的数组:

@[Dog, Cat, Bird, Fish, ...]

我不想获取实体数组,我只想要animalTypes 的唯一列表。 不应该重复animalType

【问题讨论】:

@Emil 感谢您的编辑! 不客气!有关格式和问题风格的提示,请参阅editing help :) 【参考方案1】:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Animal"];
request.returnsDistinctResults = YES;
request.resultType = NSDictionaryResultType;
request.propertiesToFetch = @[@"animalType"];

NSArray *fetchedObjects = [self.managedObjectContext 
                         executeFetchRequest:request error:nil];

NSArray *result = [fetchedObjects valueForKeyPath:@"animalType"];

// @[@"Dog", @"Cat", @"Fish" ...]

【讨论】:

这也是一个出色的答案!谢谢!【参考方案2】:

是的,你需要NSFetchRequestsetReturnsDistinctResults: 方法,结合setPropertiesToFetch:setResultType: NSDictionaryResultType。基本上,获取将返回一个字典数组,而这些字典又将包含与您获取的特定属性相对应的键值对——在您的情况下,每个字典都有一个键 animalType 和一个不同的值那把钥匙。将其转换为您所描述的数组将很简单。

【讨论】:

这看起来很棒!我会试一试,然后回来接受您的回答。

以上是关于CoreData 可以返回唯一的实体属性吗?的主要内容,如果未能解决你的问题,请参考以下文章

基于实体属性确保 CoreData 实体唯一的最佳实践

Coredata Xcode 8中的“在实体的唯一性约束属性中,逗号不是有效属性”

Core Data 中线程安全的唯一实体实例

根据 coredata 中的属性名称获取唯一对象

coreData为关系表添加其他属性的多对多关系

替换 CoreData 实体中所有属性的 getter