NSPredicate et test de l'existence d'une clef

yoannyoann Membre
Salut tout le monde,

Voilà  j'ai un petit problème basique, j'ai un array de dico et j'aimerais filtrer cet array pour en ressortir que les dico possédant une certaine clef cependant je ne trouve plus dans la doc comment faire un key != nil ...

Si quelqu'un à  l'info :-)

@++

Réponses

  • dilarogadilaroga Membre
    17:44 modifié #2
    La réponse ne serait pas dans la question ?

    <br />if ( nil != [aDico objectForKey:@&quot;aKey&quot;] )<br />&nbsp; &nbsp; // traiter le dico<br />else<br />&nbsp; &nbsp; // ignorer le dico<br />
    
  • ClicCoolClicCool Membre
    17:44 modifié #4
    dans 1258378887:
    .../...cependant je ne trouve plus dans la doc comment faire un key != nil ...
    .../...


    C'est pas justement ça ?
    predicate = [NSPredicate predicateWithFormat:@&quot;key != nil&quot;];
    
    ???

    A moins que ce soit <>nil ?
    Il ne me semble pas nécessaire d'utiliser un NSNul mais à  tester éventuellement.

  • yoannyoann Membre
    novembre 2009 modifié #5
    Merci Ali, je vais retourner me coucher avec la doc XD

    Cela dit je me paye une exception, voici le bout de code du predicat

    filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@!(prono-order = nil)

    et je me récupère un :

    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unknown number type or nil passed to arithmetic function expression.'

    j'ai testé le != nil aussi et j'ai droit à  la même chose :/

    @dilagora, merci mais l'énumération à  la main ça va, j'aimerais juste éviter de rajouter une boucle et faire ça avec les prédicat qui sont la pour ça ^^



    EDIT :

    A vrai dire, ça me le fait quelque soit le prédicat que j'utilise... Pourtant au NSLog le Array est bon.
  • ClicCoolClicCool Membre
    17:44 modifié #6
    dans 1258381651:
    .../...
    j'ai testé le != nil aussi et j'ai droit à  la même chose :/
    .../...


    Pas normal ça !
    ça devrait marcher avec
    NSArray* mySearchedDictArray = [myDictArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@&quot;prono-order != nil&quot;]
    



    dans 1258381651:
    EDIT :

    A vrai dire, ça me le fait quelque soit le prédicat que j'utilise... Pourtant au NSLog le Array est bon.

    Y'a vraiment un problème ailleurs alors :(
  • yoannyoann Membre
    17:44 modifié #7
    Je viens de virer la ligne avec le prédicat, j'ai plus d'exception, et je viens de faire un foreach sur le même array avec un NSLog(@<;%@>;", [dict valueForKey:@prono-order]); et tout ce passe bien, j'ai bien les valeur et les null qui sortent...

    J'ai du mal à  saisir la :/
  • ClicCoolClicCool Membre
    17:44 modifié #8
    dans 1258381651:
    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unknown number type or nil passed to arithmetic function expression.'



    Mais de quoi il parle avec son "arithmetic function expression" ? ???
  • yoannyoann Membre
    17:44 modifié #9
    Le prédicat en lui même, je pense que c'est ça la fonction arithmétique, le != nil

    Mais la je sèche, le foreach gère mais pas le filtre :/
  • ClicCoolClicCool Membre
    17:44 modifié #10
    Je viens d'essayer cette syntaxe sur un de mes Arrays de NSModelObjects:
    NSArray * allDocs = [DocumentsACTRL arrangedObjects];<br />	NSLog(@&quot;allDocs.count :%d&quot;, [allDocs count]);<br />	NSArray * nonNilTitleDoc = [allDocs filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@&quot;libelle != nil&quot;]];<br />	NSLog(@&quot;nonNilTitleDoc.count :%d&quot;, [nonNilTitleDoc count]);<br />
    

    Et ça marche impécable et à  la sortie j'ai bien:
    <br />2009-11-16 16:11:09.541 ClicCab[29379:a0f] allDocs.count :413<br />2009-11-16 16:11:09.542 ClicCab[29379:a0f] nonNilTitleDoc.count :406
    



    .../...
    A mon avis t'as un problème ailleurs.

    Essaies un clean all target, les incantations voodoo etc...
  • dilarogadilaroga Membre
    17:44 modifié #11
    Ehehe oui j'ai un peu trop tendance à  associer CoreData et les NSPredicate au point d'en oublier qu'on peut s'en servir dans un autre context... Pourtant ils sont bien dans la Foundation...

    Sinon ça serait pas le tiret de ta clé qui mettrait le barouf...

  • ClicCoolClicCool Membre
    17:44 modifié #12
    dans 1258384580:
    .../...
    Sinon ça serait pas le tiret de ta clé qui mettrait le barouf...


    Fort possible ça !
    J'ai essayé en modifiant la clef "libelle" par "libe-lle" et j'ai eu cette erreur:
    2009-11-16 16:21:15.636 ClicCab[29475:a0f] [<Observation 0x275820> valueForUndefinedKey:]: the entity Observation is not key value coding-compliant for the key "libe".

    Il teste la clef "libe" et pas "libe-lle"  >:)

    Tu devrais remplacer le tiret par un underscore ;)
  • yoannyoann Membre
    17:44 modifié #13
    dans 1258384580:

    Sinon ça serait pas le tiret de ta clé qui mettrait le barouf...


    Saloperie de tiret... C'était bien ça ! D'un coup je retrouve un fonctionnement normal des NSPredicate ^^

    Merci pour le partage de temps de cerveau !
Connectez-vous ou Inscrivez-vous pour répondre.