NSPredicate - 无法解析格式字符串

时间:2013-05-03 11:59:43

标签: ios core-data nspredicate

我正在尝试编写一个NSPredicate来获取带有my_column值的行,并使用此字符串“193e00a75148b4006a451452c618ccec”,我得到了以下崩溃。

  

由于未捕获的异常而终止应用   'NSInvalidArgumentException',原因:'无法解析格式   字符串“my_column = 193e00a75148b4006a451452c618ccec”'

我的谓词陈述

fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@==\"%@\"",attributeName,itemValue]];

也试过这个

fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ == %@",attributeName,itemValue]];

fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ = %@",attributeName,itemValue]];

和这个

fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@=\"%@\"",attributeName,itemValue]];

请帮忙。

当我尝试使用Martin R的答案时,我发现了这一点

fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%@==%@",attributeName,itemValue];

attributeName我传递了''所以我取下了attributeName并对其进行了硬编码,然后就可以了。

3 个答案:

答案 0 :(得分:45)

将字符串括在单引号中:

[NSPredicate predicateWithFormat:@"my_column = '193e00a75148b4006a451452c618ccec'"]

更好,使用参数替换:

[NSPredicate predicateWithFormat:@"my_column = %@", @"193e00a75148b4006a451452c618ccec"]

如果搜索字符串包含特殊字符,则第二种方法可以避免问题 例如'"

备注:在构建谓词时不要使用stringWithFormatstringWithFormatpredicateWithFormat以不同的方式处理%K%@格式,因此将它们组合在一起 两种方法非常容易出错(并且不必要)。

答案 1 :(得分:4)

我认为你在检查平等时错过了',

现在尝试,

[NSPredicate predicateWithFormat:@"my_column='193e00a75148b4006a451452c618ccec'"];

答案 2 :(得分:3)

尝试

//Case Insensitive
fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%K = [cd] %@",attributeName,itemValue];

//Case sensitive
fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%K = %@",attributeName,itemValue];