come una soluzione rapida, non dovrebbe essere necessario la parte NSString
a tutti. Questa sostituzione è l'intero punto del metodo predicateWithFormat:
! Semplicemente utilizzare:
NSPredicate *query = [NSPredicate predicateWithFormat:@"s_name == %@ AND s_regno == %d", Name, [RegNo intValue]];
Mi piace evitare completamente le stringhe di formato e creare invece il predicato nel codice.
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]];
Nota che ho aggiunto NSCaseInsensitivePredicateOption|NSDiacriticInsensitivePredicateOption
per fare un caso-e confronto diacritic insensibile sul nome, come in s_name like[cd] %@
. Se non ne hai bisogno, puoi ovviamente usare type:NSEqualToPredicateOperatorType
e options:0
.
fonte
2013-01-02 02:40:28
E se la stringa di input ha virgolette doppie, allora cosa? – northernman