使用NSPredicate返回多个值

时间:2012-01-23 19:24:27

标签: iphone core-data

我正在使用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个。

3 个答案:

答案 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;

现在我得到了正确的结果。