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

时间:2013-02-08 21:51:44

标签: objective-c core-data nsfetchrequest predicates

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

的数组
@[Dog, Cat, Bird, Fish, ...]

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

2 个答案:

答案 0 :(得分:3)

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" ...]

答案 1 :(得分:2)

是的,您需要NSFetchRequest的{​​{1}}方法,以及setReturnsDistinctResults:setPropertiesToFetch:。基本上,fetch将返回一个字典数组,这些字典将依次包含与您获取的特定属性相对应的键值对 - 在您的情况下,每个字典都有一个键setResultType: NSDictionaryResultType和一个不同的该键的值。将其转换为类似于您描述的数组的数组将是直截了当的。