这个问题听起来像是一个新手,但我已经完成了我的解决方案的所有线程,这对我来说仍然是一个问题。所以我有一个实体“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”。
请帮忙。提前谢谢。
答案 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"];
但是你仍然需要遍历结果数组才能获取描述值。