2014-12-03 15 views
9

Pracuję nad zupełnie nową aplikacją OS X i podjąłem śmiały sposób pracy z kilkoma technologiami, których wcześniej nie używałem. (Jestem programistą iOS.)W jaki sposób OS X ładuje aplikację opartą na scenorysach i w jaki sposób zarządza oknami?

Używam Storyboards, Swift i Core Data w mojej aplikacji, wszystko z szablonu Xcode. Kiedy moja aplikacja się uruchamia, tworzy NSWindowController z Storyboard.

W innej aplikacji OS X wykonanej w Objective-C używam metody delegowania applicationShouldHandleReopen:hasVisibleWindows:, aby nakazać sterownikowi okna wywołanie okna kontrolera okna.

Wiem, że semantyka języka pozostaje taka sama w Swift, ale Core Data i Storyboards pozostawiają mi dwa pytania.

  1. Czy fakt, że mój projekt wykorzystuje dane podstawowe, zmienia go w "aplikację opartą na dokumentacji", a zatem zmienia sposób zarządzania oknami?

  2. W moim starym projekcie używam stalówek zamiast storyboardów. Wygląda na to, że ręcznie robię instancję NSWindowController i używam go do zarządzania ponownym otwarciem. Jeśli jest jakiś sposób, aby dostać się do tego, co moja Storyboard niewątpliwie dla mnie robi, byłoby to optymalne, prawda? Czy po prostu dołączasz do mojego Delegata aplikacji drogę do wyjścia? Czy istnieje inna konwencja?

+0

pokrewne: http://stackoverflow.com/questions/3683349/nswindowcontroller-clarification-of-understanding – Moshe

+0

Odgryzłeś za dużo naraz. – uchuugaka

+0

Architektura dokumentów jest zupełnie inna i dodaje więcej do hierarchii. Każda instancja NSDocument może mieć wiele kontrolerów okien. Zalecam najpierw osobne rozwiązywanie scenorysów, danych podstawowych i łuku dokumentów. – uchuugaka

Odpowiedz

6
  1. nr Sprawdzanie dokumentu „Tworzenie aplikacji opartej na” co to aplikacja oparta dokument zrobiony. Decyzja o użyciu Core Data jest osobna.

  2. Scenariusz, który otrzymasz, gdy tworzysz aplikację opartą na dokumencie OS X, jest nieco nietypowy. Zauważ, że w scenorysie nie ma strzałki informującej, gdzie jest punkt wejścia. Co się dzieje, tworzy się "Dokument". Ma metodę:

    override func makeWindowControllers() { 
        // Returns the Storyboard that contains your Document window. 
        let storyboard = NSStoryboard(name: "Main", bundle: nil)! 
        let windowController = storyboard.instantiateControllerWithIdentifier("Document Window Controller") as NSWindowController 
        self.addWindowController(windowController) 
    } 
    

to idzie patrząc w serii ujęć dla kontrolera z identyfikatorem @ „Okno Document Controller” (który tak się dzieje, że kontroler okno). Dokument przechowuje kolekcję kontrolerów okiennych. więc dokument tworzy instancję i dodaje do niej windowController.

Więc Dokument ma już odniesienia do sterownika okna w Document.windowControllers

(Czy ktoś może mi powiedzieć, dlaczego Dokument zostanie utworzony chociaż nie widzę, co faktycznie powoduje jego tworzenia?)

+0

Wygląda na to, że domyślnie nie otrzymasz okna, dopóki użytkownik nie utworzy nowego dokumentu, klikając ikonę dokowania. Prawdopodobnie jest to lepsze, ponieważ możesz pokazać coś podobnego do listy plików w icloud/hd takich jak TextEdit lub Pages zamiast tego. – Chris

+0

Musi być automatyczny komunikat "newDocument:", który zostanie wysłany po uruchomieniu aplikacji. To ma sens. –

Powiązane problemy