25

我正在尝试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];

我传递的属性名称带有一个'',所以我取下了属性名称并对其进行了硬编码,然后它就可以正常工作了。

4

3 回答 3

50

将字符串括在单引号中:

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

或者更好,使用参数替换:

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

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

备注:stringWithFormat构建谓词时切勿使用。stringWithFormat并 以不同predicateWithFormat的方式处理%Kand%@格式,因此将这两种方法结合起来非常容易出错(并且没有必要)。

于 2013-05-03T12:04:00.687 回答
4

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

现在试试,

[NSPredicate predicateWithFormat:@"my_column='193e00a75148b4006a451452c618ccec'"];
于 2013-05-03T12:03:55.327 回答
3

尝试

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

//Case sensitive
fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%K = %@",attributeName,itemValue];
于 2013-05-03T12:09:17.783 回答