NSTreeController binding d'une image

yannSyannS Membre

Bonjour,

J'expérimente toujours la gestion d'une arborescence avec un source list
Graphiquement j'ai ceci

Je voudrais changer

Réponses

  • yannSyannS Membre

    Aie trompé de bouton

    Je voudrais changer l'icone "roue" par autre chose

    J'ai une classe qui définie les données de mon treeController

    class Arbo: NSObject {
    
        @objc dynamic var text: String
        @objc dynamic var leaf: Bool
        @objc dynamic var icon: NSImage
        @objc dynamic var children = [Arbo]()
    
    
    
        init(text: String, leaf: Bool = false) {
    
            self.text = text
            self.leaf = leaf
            self.icon = NSImage(imageLiteralResourceName: "text_left.png")
        }
    
    
    }
    

    J'ai essayé comme pour le texte vers le table View Cell de faire le binding de "icon" vers l'image view de mon source list.
    Mais ça plante lamentablement
    C'est à priori pas la bonne méthode

  • PyrohPyroh Membre

    Tu peux nous en dire un peu plus sur ce plantage lamentable ?
    Parce que a priori le binding devrait fonctionner.

  • yannSyannS Membre

    J'y crois pas, ça plantait direct, comme ça,

    J'ai juste vérifié le binding

    Et ça marche !!!!
    Pour avoir une nouvelle fois l'erreur j'ai indiqué une valeur non présente dans ma classe
    Pourtant au départ j'avais bien taper "icon"
    J'avoue ne pas comprendre, je vais admettre..

    Pour mon info comment on fait pour marquer un post comme résolu ?

  • PyrohPyroh Membre
    C’est normal. Mais je t’explique demain la je suis sur un iPhone c’est moins pratique 😉
  • CéroceCéroce Membre, Modérateur

    Quand on fait appel à une clé (variable d'instance), qui n'est pas connue, le Key-Value Coding ne sait pas quoi faire et (par défaut) lève une exception.

    Le KVC est ce qui permet d'écrire:

    arbo.setValue("Toto" forKey: "text")
    let isLeaf = arbo.value(forKey: "leaf")
    

    La résolution est dynamique: ça utilise le runtime Objective-C, et l'objet doit nécessairement hériter de NSObject (l'objet de base en Objective-C, qui implémente le KVC).

    Remarque: Swift étant un langage statique, il ne permet pas de faire l'équivalent du KVC (sauf à utiliser un générateur de code…). Apple a travaillé pour permettre d'utiliser les objets Objective-C en Swift.

Connectez-vous ou Inscrivez-vous pour répondre.