Jak szybko naprawić, nie powinna potrzebować NSString
udział w ogóle. Ta substytucja to cały punkt metody predicateWithFormat:
! Wystarczy użyć:
NSPredicate *query = [NSPredicate predicateWithFormat:@"s_name == %@ AND s_regno == %d", Name, [RegNo intValue]];
chciałbym uniknąć ciągi formatu całkowicie i zamiast budować predykat w kodzie.
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]];
Zauważ, że dodałem NSCaseInsensitivePredicateOption|NSDiacriticInsensitivePredicateOption
zrobić CASE- i diakrytyczny niewrażliwe porównanie na imię, jak w s_name like[cd] %@
. Jeśli nie potrzebujesz tego, możesz oczywiście użyć type:NSEqualToPredicateOperatorType
i options:0
.
A jeśli twój łańcuch wejściowy ma podwójne cudzysłowy, to co? – northernman