2012-03-11 55 views
1

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

到现在我已经用这一切的疑问:

[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”。

请帮帮忙。提前致谢。

+0

您是否试过[NSPredicate predicateWithFormat:@“descrip ==%@”,@“%”];?你只想要descrip的独特价值? – Ravin 2012-03-11 15:28:50

+0

它不适合我。 – iamsult 2012-03-12 05:52:04

回答

2

NSPredicate是用来限制你的结果到坚持一定的限制的实体 - 就像你说的,记述== @“艺术画廊”将返回有decrip属性设置为所有实体美术馆

就你而言,你不想限制查询中的实体。只需执行没有任何谓词的查询,并返回所有实体。现在只要遍历所有的实体,并获得记述的所有值成的NSMutableSet的NSMutableDictionary,你有你记述值的列表。

+0

感谢upvote并接受。 – iamsult 2012-03-12 09:34:58

0

您还可以设置请求

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

但你还是要循环的结果阵列上,以只抢记述值。

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. 
}