现在我在NSPredicate面临单引号(')问题。
这是我的查询:
NSPredicate *query = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"s_name='%@' AND s_regno=%d",Name,[RegNo intValue]]];
当我使用名称“John”过滤时,它没有问题,也没有任何错误。但我使用的名字是“Mary'Monny”。有一个错误。
我怀疑这是因为单引号。请帮助我解决这个问题。
由于
答案 0 :(得分:14)
作为快速解决方案,您根本不需要NSString
部分。这种替换是predicateWithFormat:
方法的全部要点!只需使用:
NSPredicate *query = [NSPredicate predicateWithFormat:@"s_name == %@ AND s_regno == %d", Name, [RegNo intValue]];
我喜欢完全避免使用格式字符串,而是在代码中构建谓词。
NSPredicate *nameQuery =
[NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"s_name"]
rightExpression:[NSExpression expressionForConstantValue:Name]
modifier:NSDirectPredicateModifier
type:NSLikePredicateOperatorType
options:NSCaseInsensitivePredicateOption|NSDiacriticInsensitivePredicateOption];
NSPredicate *regNoQuery =
[NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"s_regno"]
rightExpression:[NSExpression expressionForConstantValue:RegNo]
modifier:NSDirectPredicateModifier
type:NSEqualToPredicateOperatorType
options:0];
NSPredicate *query = [NSCompoundPredicate andPredicateWithSubpredicates:@[nameQuery,regNoQuery]];
请注意,我添加了NSCaseInsensitivePredicateOption|NSDiacriticInsensitivePredicateOption
来对名称进行不区分大小写和变音符号的比较,如s_name like[cd] %@
中所示。如果您不需要,您当然可以使用type:NSEqualToPredicateOperatorType
和options:0
。
答案 1 :(得分:1)
如果name = @“Bell's”,你可以尝试制作这样的谓词:
NSPredicate *query = [NSPredicate predicateWithFormat:@"name == \"%@\"", name];
只需用双引号替换标准单引号。