Mam opartą na dokumentach aplikację Core Data. Istnieje NSTreeController
, który zarządza zbiorem obiektów wyświetlanych w jednym NSOutlineView
jako liście źródłowej. Są to typowe rzeczy: nagłówki, foldery, foldery inteligentne itp.Architektura kontrolera NS (Array | Tree) dla wielu kontrolerów NSView
Każdy z tych obiektów kontenerowych ma kolekcję obiektów o rozmiarach contents
. Mam trzy osobne kontrolery widoku, które wyświetlają te obiekty na różne sposoby (NSTableView
i dwa niestandardowe widoki graficzne, jeśli naprawdę chcesz wiedzieć), ale są to tak naprawdę tylko trzy różne prezentacje tych samych danych. Powinny zawsze pokazywać te same obiekty, udostępniać tę samą selekcję itp.
Używam również hierarchii NSViewController
s do zarządzania moimi widokami. (Gdybym wiedział o doskonałejCathy Shive, użyłbym tego, ale moje kontrolery widoku są bardzo podobne do - i bardzo zainspirowane - jej)
W obecnej postaci, I mieć NSTreeController
żyjących w kontrolerze widoku dla widoku listy źródłowej. Mam również NSArrayController
w każdym z kontrolerów sub-view, który jest związany z NSTreeController
przez niektóre zbyt skomplikowane klawisze.
Więc, co trzeba zmienić, moim zdaniem, jest następujący:
- The
NSTreeController
musi wyprowadzić się z kontrolerem w widoku konspektu. - Powinien istnieć pojedynczy
NSArrayController
, w którym każdy widok zawartości może być powiązany zamiast trzech oddzielnych widoków. Chociaż jestem mniej pewny tego punktu.
To, z czym mam problem, polega na tym, że te rzeczy powinny żyć pod warunkiem, gdzie. Trudno mi jest zdecydować, które obiekty, jeśli w ogóle, naprawdę "posiadają" różnych kontrolerów. Czy kontrolery widoku nadrzędnego są jego właścicielami? Czy sterownik okienny? Jako że są to dane na poziomie aplikacji, czy mogę posunąć się tak daleko, aby uczynić je własnością Delegata aplikacji? (Mogę wyobrazić sobie sytuację, w której użycie może chcieć otworzyć wiele okien, choć obecnie nie jest to obsługiwane) Co myśli umysł ula StackOverflow?
Dziękuję za przemyślaną odpowiedź! Zawsze uważałem kontrolerów obiektów za bardziej zorientowanych na widok. To jeden z powodów mojego niezdecydowania tutaj :-) Nie myślałem o użyciu obiektu RepresentObject dla kontrolerów; W pewnym sensie zrezygnowałem z programowania programowego. Motywacją tego pytania jest to, że osiągnąłem punkt, w którym muszę zrestrukturyzować. Staje się zbyt bolesne, aby zarządzać całą złożonością posiadania kontrolerów w dziwnych miejscach. Wykluczyłem również delegata aplikacji jako odpowiednie miejsce. Okno wydaje się najbardziej logicznym miejscem. – Alex