Quizz : NSArrayController rempli de NSString

Philippe49Philippe49 Membre
03:05 modifié dans API AppKit #1
L'exemple de Hillegass avec Employee liste les employés en synchronisant/bindant la table view avec le champ Employees.personName
Les objets ont un champ de type NSString présentés dans la table view, et transformable via la table view.

Mais si l'array controller ne contient que des NSStrings, directement. Que va-t-on mettre comme binding dans la table view pour que cela soit transformable ?

Votre Solution ?



Réponses

  • CéroceCéroce Membre, Modérateur
    03:05 modifié #2
    Je n'ai peut être pas compris, mais si c'est une liste, elle est forcément maintenue par un NS(Mutable)Array.

    J'ai l'impression que tu veux dire: "si on ne fixe pas l'outlet ou le binding content, comment binde-t-on le contenu du NSArrayController ?".
    Dans ce cas, le NSArrayController crée un NSMutableArray en interne, et tu peux accéder à  ses objets comme d'habitude.
  • Philippe49Philippe49 Membre
    03:05 modifié #3
    Oui elle est maintenue par une NSArray contenant des NSString.
    Tu mets quoi alors dans le binding value de la table column ? "arrangedObjects" tout seul ?
  • CéroceCéroce Membre, Modérateur
    03:05 modifié #4
    J'ai enfin compris ce qui te chagrines.
    Du coup, j'ai fait l'essai en bindant seulement sur arrangedObjects, et ça ne fonctionne pas:

    Error setting value for key path  of object  (from bound object <NSTableColumn: 0x127290>(null)): [<NSCFString 0xa0199d50> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key .
    


    Je ne crois pas qu'on puisse faire cela avec un NSArrayController.


  • Philippe49Philippe49 Membre
    03:05 modifié #5
    dans 1244550456:

    J'ai enfin compris ce qui te chagrines.


    Ah cela fait plaisir d'être compris dans son chagrin  :'( :o

    Pour l'instant j'essaie de déclarer la classe du arrayController en NSMutableString, de faire une catégorie sur NSMutableString avec une méthode -(NSMutableString*)string { return self;} sachant que setString: est déjà  une méthode de NSMutableString.
    Et je binde à  arrangedObjects.string. Qu'en penses-tu ?
  • CéroceCéroce Membre, Modérateur
    03:05 modifié #6
    Oui, ça devrait le faire.
    Une autre méthode pourrait être de déclarer une catégorie setValue:forUndefinedKey:.

    Mais ça reste de la bidouille. Ta question est intéressante mais relève du cas d'école. En pratique, il va bien falloir initialiser la NSString, en lui donnant une valeur par défaut, en générant du texte, ou en lisant depuis un fichier: ce que je ferais, ce serait simplement déclarer la NSString comme une propriété d'un objet.
  • Philippe49Philippe49 Membre
    03:05 modifié #7
    dans 1244561293:

    Oui, ça devrait le faire.
    Une autre méthode pourrait être de déclarer une catégorie setValue:forUndefinedKey:.

    Oui ou de sous-classer le NSArrayController

    dans 1244561293:

    ... du cas d'école.... ce serait simplement déclarer la NSString comme une propriété d'un objet.

    Pas vraiment, le problème s'est posé pour moi avec un NSUserDefaults contenant une NSArray de strings justement (liste de mots clés customisable par l'utilisateur)
Connectez-vous ou Inscrivez-vous pour répondre.