web-dev-qa-db-fra.com

nSPredicate insensible à la casse avec un seul résultat dans CoreData

Voici mon NSPredicate actuel:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC==%@ OR ItemID==%@", aUPCCode,aUPCCode];

Comment puis-je rendre ce cas insensible? 

Et je ne veux pas faire de correspondance partielle. 

Exemple si ils entrent 123 pour aUPCCode Je ne veux pas obtenir 123, 123a, 123b, 123c, ect. Je voudrais seulement une correspondance exacte.

J'ai pensé faire cela mais cela semble un peu ridicule:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC==%@ OR ItemID==%@ OR UPC==%@ OR ItemID==%@ OR UPC==%@ OR ItemID==%@", aUPCCode,aUPCCode,[ aUPCCode lowercaseString] ,[aUPCCode lowercaseString], [aUPCCode uppercaseString],[aUPCCode uppercaseString]];
42
Slee

Comme Dave DeLong l'a dit, vous pouvez utiliser:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC ==[c] %@ OR ItemID ==[c] %@", aUPCCode,aUPCCode];

Modifier :

Utilisez ==[c] au lieu de ==[cd] ou vous obtenez aussi des accents (abcd == àbcd).

81
Sinetris

Comme Sinetris l'a dit, ce qui précède fonctionne en Objective-C.

Cela fonctionne pour la casse. Récupère tous les résultats contenant la chaîne "exemple".

Mise à jour de Swift 4.0

let predicateIsNumber = NSPredicate(format: "keywordContactNo contains[c] %@", example!) 

J'espère que ça aide

Merci

1
Harjot Singh

peut être ça:

[NSPredicate predicateWithFormat:@"UPC MATCHES[cd] %@ OR ItemID MATCHES[cd] %@",aUPCCode,aUPCCode];
0
Michael Frederick