web-dev-qa-db-fra.com

NSPredicate qui est l'équivalent de LIKE de SQL

Je cherche un moyen d'utiliser NSPredicate pour définir une condition LIKE pour récupérer des objets. En plus de cela, un OR serait également utile. J'essaie de faire quelque chose où si un utilisateur recherche "James", je peux écrire un NSPredicate qui fera l'équivalent de:

select * from users where firstname LIKE '%James%' OR lastname LIKE '%James%';
49
randombits
NSString *_mySearchKey = @"James";
NSPredicate *_myPredicate = [NSPredicate predicateWithFormat:@"(firstname CONTAINS[cd] %@) OR (lastname CONTAINS[cd] %@)", _mySearchKey, _mySearchKey];
119
Alex Reynolds

L'opérateur CONTAINS fonctionnera certainement très bien. Si vous recherchez une corrélation plus directe, vous pouvez également utiliser l'opérateur LIKE (* = 0 ou plusieurs caractères, ? = 1 caractère):

NSString *_mySearchKey = @"James";
NSPredicate *_myPredicate = [NSPredicate predicateWithFormat:@"firstname LIKE '*%1$@*' OR lastname LIKE '*%1$@*'", _mySearchKey];

Pour référence:
https://developer.Apple.com/library/content/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//Apple_ref/doc/uid/TP40001795-215868 =

37
Dave DeLong

Une autre possibilité

@"firstname beginswith[c] James"

Comme une belle alternative à contient

Contient parfois n'est pas toujours la bonne réponse

10
M. Ryan