作爲速戰速決,你不應該需要在所有的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
。
如果你的輸入字符串有雙引號,那麼是什麼? – northernman