NSPredicate: problème de comparaison de string

6ix6ix Membre
20:38 modifié dans API AppKit #1
Hello,

Je suis tombé sur un problème qui me semble bizarre, relatif au filtrage avec NSPredicate d'un NSArray comportant des entités Core Data. J'ai trouvé comment le contourner, mais ça me semble pas très " propre ", je me dis que c'est peut-être moi qui n'ai pas tout compris...

Je fais la chose suivante:
1) dans un NSArray d'entités Core Date, je sélectionne la 1e entité (si existante), et récupère le NSString de l'attribut nom.
2) je filtre ensuite une copie de ce même NSArray en ne gardant que les entités ayant ce même nom, de cette manière:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like[c] %@", entityName];


Pour info, l'idée est de regrouper dans différents tableaux les entités ayant le même nom; il y a d'ailleurs peut-être une méthode beaucoup plus rapide pour cela, si ça se trouve ?

Bref, ma solution fonctionne, sauf dans le cas où des entités ont un nom " vide ", assigné avec @";". En résumé, il m'est impossible de filtrer mon tableau afin de récupérer les entités ayant un nom vide justement.

Y a-t-il une solution à  cela ? Ca peut sembler logique vu que @";" devient nil, mais soit j'ai manqué un truc, soit c'est un peu con que ce cas ne soit pas prévu...

Pour l'instant, ma solution est de toujours attribuer un nom, @- signifiant " vide ", et là  tout fonctionne correctement.

Réponses

  • AliGatorAliGator Membre, Modérateur
    20:38 modifié #2
    Attention il y a une nuance entre @";" et nil.
    Dans le cas que tu évoques, la variable entityName contient quoi ? la chaà®ne vide @";" ? ou elle est à  nil ?
  • 6ix6ix Membre
    20:38 modifié #3
    dans 1263058029:

    Attention il y a une nuance entre @";" et nil.
    Dans le cas que tu évoques, la variable entityName contient quoi ? la chaà®ne vide @";" ? ou elle est à  nil ?


    Ma variable est bien initialisée à  @";" (chaà®ne vide). Et j'ai fait des tests en la " hard-codant " à  @";". En fait, j'ai l'impression que ce sont les éléments comparés qui se comportent comme si leur variable de nom valait nil, est donc que le name like était de toute façon faux. Bref, cela m'intrigue !
Connectez-vous ou Inscrivez-vous pour répondre.