Accéder au node "racine" d'un NSTreecontroller

yannSyannS Membre

Bonsoir,
Je débute avec swift et cocoa.

J'expérimente l'utilisation de NSOutlineview associé à un NSTreecontroller.
Je me débrouille pas trop mal pour ajouter, modifier, supprimer des nodes.
Je cherche à implémenter une fonction de recherche de node et donc de partir de la racine de mon arborescence.
Je n'ai rien trouvé dans le documentation (j'ai certainement mal lu) qui indique comment accéder au node racine, juste comment accéder au node sélectionné.
Est-ce qu'il y a quelque chose qui permet d'accéder au node "racine" ?

Merci pour votre aide

Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur

    arrangedObjects

  • CéroceCéroce Membre, Modérateur

    C'est difficile de répondre parce que tu ne dis pas explicitement ce que tu as fait.
    Comment as-tu spécifié le type d'objets qui allaient dans le NSTreeController ?

  • yannSyannS Membre

    Bonjour,
    Merci pour vos réponses

    Pour être plus clair, j'ai créé une classe correspondant à la structure de données que je veux gérer

    class arbo: NSObject {
    
        @objc dynamic var text: String
        @objc dynamic var leaf: Bool
        @objc dynamic var children = [arbo]()
    
    
    
        init(text: String, leaf: Bool = false) {
    
            self.text = text
            self.leaf = leaf
    
        }
    
    
    }
    

    Pour l'exemple, dans le viewcontroler j'ai implémenté quelques données que j'ai ajouté au treeController

    @IBOutlet var treeController: NSTreeController!    
    var arbre = arbo(text: "Racine")
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        // Do any additional setup after loading the view.
        initArbre()
        treeController.addObject(arbre)
    
    
    }
    
    func initArbre() {
    
        let branche1 = arbo(text: "branche1")
        let branche2 = arbo(text: "branche2")
        let feuille1 = arbo(text: "feuille1", leaf: true)
        let feuille2 = arbo(text: "feuille2", leaf: true)
    
        branche1.children = [feuille1]
        branche2.children = [feuille2]
    
        arbre.children = [branche1, branche2]
    
    
    }
    

    Ce qui donne

    Racine
    |__branche1
    |   |_feuille1
    |__branche2
       |_feuille2
    

    Sans prendre en compte la sélection fait de l'un des noeuds, je veux par exemple vérifier si "feuille2" existe.
    Je voulais créer une fonction du type isInTreeController(_ cle : String, _ valeur : String) -> Bool
    ( avec clé pouvant être l'une des propriétés de mal classe arbo, ici forcément text, et valeur la valeur de la clé) qui scanne l'arborescence et répond true/false si la valeur est trouvée ou pas

  • yannSyannS Membre

    Je viens d'essayer arrangedObjects , je retrouve bien ma racine

    let rootNode = self.treeController.arrangedObjects.children?.first
    let rootObject = rootNode?.representedObject as? arbo
    
  • CéroceCéroce Membre, Modérateur

    Résolu alors ?

    P.S.: Par convention, les noms de classes doivent commencer par une majuscule. arbo -> Arbo.

  • yannSyannS Membre
    16 janv. modifié #7

    Résolu,

    Ok c'est noté pour le nom des classes

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