作为快速修复,您根本不需要该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
and options:0
。