NSPredicate == 查询
Posted
技术标签:
【中文标题】NSPredicate == 查询【英文标题】:NSPredicate == query 【发布时间】:2011-05-27 12:37:56 【问题描述】:我正在尝试使用 nspredicate 来查找一个托管对象,其属性值 == 到我要检查的值。
我确定该值在我的数据模型中。
这是我迄今为止尝试过的,但结果数组计数始终为零。
-(BOOL)checkIfFavouriteExists:(NSString *)data
BOOL returnvalue;
NSFetchRequest *fetchReq = [[NSFetchRequest alloc]init];
NSString *attributeName = @"userid";
NSString *attributeValue = data;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == '%@'",
attributeName, attributeValue];
//setting the predicate to the fetch request
[fetchReq setPredicate:predicate];
[fetchReq setEntity:[NSEntityDescription entityForName:@"Favourites" inManagedObjectContext:self.managedObjectContext]];
NSMutableArray *resultArray = [[NSMutableArray alloc]initWithArray:[self.managedObjectContext executeFetchRequest:fetchReq error:nil]];
if([resultArray count]>0)
returnvalue=YES;
else
NSLog(@"No records");
returnvalue=NO;
return returnvalue;
编辑
问题似乎与我的查询格式有关。
这行得通吗?
NSExpression *exprName = [NSExpression expressionForKeyPath:@"userid"];
NSExpression *exprVal = [NSExpression expressionForConstantValue:data];
NSPredicate *predicate = [NSComparisonPredicate predicateWithLeftExpression:exprName
rightExpression:exprVal
modifier:NSDirectPredicateModifier
type:NSEqualToPredicateOperatorType
options:0];
我不明白为什么一个有效而另一个无效。他们都做同样的事情对吗?
【问题讨论】:
您是否尝试从 -executeFetchRequest:error: 中捕获错误? 你尝试过在谓词格式中使用单个=
吗?
试试这个,[NSPredicate predicateWithFormat:@"%@ = %@", attributeName, attributeValue];
@SImon,我找到了解决方案,但我也会试试你的 :)
【参考方案1】:
不要将变量放在引号中。 documentation on Parser Basics 声明:
单引号或双引号变量(或 替换变量字符串)原因 要解释的 %@、%K 或 $variable 作为格式字符串中的文字和 所以防止任何替代。
应该这样做:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userid == %@", attributeValue];
您可以在Predicate Programming Guide 中阅读有关谓词的更多信息。
【讨论】:
以上是关于NSPredicate == 查询的主要内容,如果未能解决你的问题,请参考以下文章
Objective-c NSPredicate - 按不同 NSManagedObjectContext 中的 ObjectId 过滤