我正在尝试编写一个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并对其进行了硬编码,然后就可以了。
答案 0 :(得分:45)
将字符串括在单引号中:
[NSPredicate predicateWithFormat:@"my_column = '193e00a75148b4006a451452c618ccec'"]
或更好,使用参数替换:
[NSPredicate predicateWithFormat:@"my_column = %@", @"193e00a75148b4006a451452c618ccec"]
如果搜索字符串包含特殊字符,则第二种方法可以避免问题
例如'
或"
。
备注:在构建谓词时不要使用stringWithFormat
。 stringWithFormat
和
predicateWithFormat
以不同的方式处理%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];