我正在使用NSPredicate来查询Core Data商店。我有一个NSNumber类型的属性。我希望得到所有等于1的属性。
我试过了:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"attribute == %i", i];
其中i = 1。
这可以工作,但它只返回具有匹配属性的第一个对象。我希望所有具有此属性的对象等于1.
我哪里错了?我尝试将ALL放在查询前面,但这导致了崩溃。
更新
这是我的完整代码:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person"
inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setResultType:NSDictionaryResultType];
NSNumber *attributeValue = [NSNumber numberWithInt:1];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"attribute == %@",
attributeValue];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *fetchResults = [managedObjectContext executeFetchRequest:fetchRequest
error:&error];
return [fetchResults objectAtIndex:0];
然后:
NSDictionary *dict = [self queryContextWithQuery:nil];
NSLog(@"%@", dict);
日志仅显示应显示的3个可能对象中的1个。
答案 0 :(得分:0)
试试这个:
NSNumber *attributeValue = [NSNumber numberWithInt:1];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"myAttr == %@",
attributeValue];
答案 1 :(得分:0)
这应该有效:
NSNumber *attributeValue = [NSNumber numberWithInt:1];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"attribute == %@",
attributeValue];
答案 2 :(得分:0)
事实证明问题不在于查询。这是我如何返回结果。我修改了方法以返回数组而不是字典并更改:
return [fetchResults objectAtIndex:0];
要:
return fetchResults;
现在我得到了正确的结果。