通过CoreData中的NSPredicate获取属性的所有值

时间:2012-03-11 13:47:15

标签: iphone core-data ios5 xcode4.2 nspredicate

这个问题听起来像是一个新手,但我已经完成了我的解决方案的所有线程,这对我来说仍然是一个问题。所以我有一个实体“LookUp”,它有一个属性'descrip'。 现在我的问题是我想获取属性'descrip'的所有值。

直到现在我已经使用了所有这些查询:

[NSPredicate predicateWithFormat:@"descrip == %@",[NSNumber numberWithInt:1]];
[NSPredicate predicateWithFormat:@"descrip == %@",@"descrip"];
[NSPredicate predicateWithFormat:@"descrip == %@",[NSNumber numberWithBool:YES]];

如果我触发查询

[NSPredicate predicateWithFormat:@"descrip == %@",@"Art Gallery"];

它返回一个数组,其中包含与“美术馆”相关联的值。 'descrip'属性包含250个值,如“Art Gallery”。

请帮忙。提前谢谢。

3 个答案:

答案 0 :(得分:2)

NSPredicate 用于将结果限制为符合特定限制的实体 - 就像您说的那样, descrip == @“Art Gallery”将返回所有实体将 decrip 属性设置为 Art Gallery

在您的情况下,您不希望限制查询中的实体。只需在没有任何谓词的情况下执行查询,将返回所有实体。现在只需遍历实体,并将 descrip 的所有值都放入 NSMutableSet NSMutableDictionary ,然后列出 descrip 值。

答案 1 :(得分:1)

您可能希望修改提取请求,而不是修改谓词。请参阅"Fetching Distinct Values" in Apple's Core Data Snippets

NSManagedObjectContext *context = // Get the context.

NSEntityDescription *entity = [NSEntityDescription entityForName:@"LookUp" inManagedObjectContext:context];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
[request setResultType:NSDictionaryResultType];
[request setReturnsDistinctResults:YES];
[request setPropertiesToFetch:@[@"descrip"]];

// Execute the fetch.
NSError *error;
id requestedValue = nil;
NSArray *objects = [context executeFetchRequest:request error:&error];
if (objects == nil) {
    // Handle the error.
}

答案 2 :(得分:0)

您也可以设置请求

[request setResultType:NSDictionaryResultType];
[request setPropertiesToFetch:
  [NSArray arrayWithObject: @"descrip"]; 

但是你仍然需要遍历结果数组才能获取描述值。