Je suis la mise en œuvre d'un champ de recherche où l'utilisateur peut entrer dans une chaîne de filtrer les éléments affichés dans une vue. Chaque objet a affiché un keywords
-beaucoup de relation, et je voudrais être en mesure de filtrer les objets sur la base des mots-clés. Chaque mot-clé objet a un name
de la propriété, de sorte que j'ai mis en place un NSPredicate de faire le filtrage qui ressemble à ceci:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS %@", self.searchString];
Cela fonctionne, mais le problème est que la recherche est sensible à la casse, donc, si le mot a un capital de lettre, mais les types d'utilisateur en minuscules, aucune correspondance n'est trouvée. J'ai essayé la modification suivante:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS[c] %@", self.searchString];
Mais cela ne fait aucune différence dans le cas de la sensibilité de l'appariement. Est-il un moyen de faire cette comparaison insensible à la casse en utilisant simplement un simple prédicat? Ou ai-je besoin pour mettre en œuvre une sorte de coutume accesseur sur le mot-clé class, par exemple, écrire un lowercaseName
méthode et un match contre un lowercase version de la chaîne de recherche à la place?
Addendum: Après l'exploration en outre, la solution de contournement de l'ajout d'un personnalisé accesseur fonctionne bien pour une utilisation manuelle du NSPredicate, mais ne fonctionne pas du tout lors de l'utilisation de NSFetchRequest avec Base de Données, qui ne fonctionne que lors de l'interrogation des attributs définis dans la Base de Données du modèle.