[Résolu]NSOutlineView dans une view ajoutée à la contentView
mybofy
Membre
Bonjour
J'ai trouvé le modèle de représentation d'une hiérarchie qui me convient,
cf. Problème avec NSOutlineView.
Dans la première application OutlineBis, tout se passe dans AppDelegate
et ça marche.
https://github.com/mybofy/OutlineBis.git
Dans la seconde, je veux placer la NSOutlineView dans une view ajoutée à la contentView :
[[_window contentView] addSubview:[_outlineViewCtrl view]];
Exécution OK mais NSOutlineView vide.
https://github.com/mybofy/OutlineTreeView.git
La seule différence que je vois est dans le Controller Content du Tree Conrtoller qui est dans le premier cas à : App Delegate
et dans le second cas à : Shared User Defaults Controller
Mais il y en a peut-être d'autre que j'ai laissées passer.
Où est mon erreur ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Shared User Defaults Controller retourne des objets immutables. Attention à les transformer en leur version mutable sous peine de crash.
J'ai avancé.
J'ai créé une instance de NSSharedUserDefaults Controller qui contient des valeurs.
Plus d'erreur de compile, mais rien ne s'affiche dans la NSOutlinView.
Voici le zip de la nouvelle version :
J'avoue que je ne saisis pas très bien ton code.
1- Pourquoi vouloir dériver NSUserDefaultsController? L'avantage de l'original, c'est de pouvoir être accessible de partout (shared instance). Pourquoi refaire ce que l'original fait très bien ? En plus, ta classe dérivée ne crée pas de shared instance...
2- L'ordre dans lequel les objets sont chargés depuis leur nib n'est pas prévisible. Tu ne peux donc pas, dans l'awakeFromNib de l'un d'eux, faire référence à des objets externes, qui n'ont peut-être pas encore été chargés. C'est probablement pour cela que tu obtiens NULL. Pour être sûr que tout est chargé et que les outlets sont fixés, il y a applicationWillFinishLaunching. Et pour savoir si la vue de ton contrôleur est chargée, il y a viewDidLoad.
Tu as raison.
J'ai fini par y arriver.
1. L'idée première de la dérivation de NSUserDefaultsController était d'isoler la création de l'arborescence des données. Une instance de NSObject ferait l'affaire, avec la création d'un NSDirectory dans NSUserDefaults.
2. J'ai utilisé les awakeFromNib par simplicité, mais ce n'est évidemment pas la bonne solution.
J'avais fait deux erreurs :
1. La création du modèle de données était incomplète. Voici la version complète :
2. Et surtout, dans le bind du Tree Controller vers la source de données (NSUserDefaultsController) il fallait faire :