9

Sto lavorando ad una nuovissima app per OS X e ho preso il coraggio di lavorare con alcune tecnologie che non ho usato molto prima. (Sono uno sviluppatore iOS.)In che modo OS X carica un'applicazione basata su storyboard e come funziona la gestione delle finestre?

Sto usando Storyboard, Swift e Core Data nella mia app, tutto dal modello Xcode. All'avvio della mia app, crea un NSWindowController da uno Storyboard.

In un'altra app OS X eseguita in Objective-C, utilizzo il metodo delegato applicationShouldHandleReopen:hasVisibleWindows: per indicare al controller della finestra di aprire la finestra del controller della finestra.

So che la semantica della lingua rimane la stessa in Swift, ma i Core Data e Storyboard mi lasciano due domande.

  1. Il fatto che il mio progetto utilizza Core Data trasformarla in una "app documento-based" e quindi cambiare il modo in cui vengono gestite le finestre?

  2. Nel mio vecchio progetto sto usando pennini invece di storyboard. Sembra che sto istanziando manualmente uno NSWindowController e usandolo per gestire la riapertura. Se c'è un modo per ottenere quello che il mio Storyboard sta facendo senza dubbio per me, sarebbe ottimale, giusto? Sta solo collegando una presa alla mia App Delegare la strada da percorrere? C'è un'altra convenzione?

+0

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

+0

Hai morso troppo in una volta. – uchuugaka

+0

L'architettura del documento è molto diversa e aggiunge di più alla gerarchia. Ogni istanza di NSDocument può avere più controller di finestra. Consiglierei di affrontare separatamente gli storyboard, i dati principali e l'arco dei documenti separatamente. – uchuugaka

risposta

6
  1. n Controllo della "Applicazione Crea documento-based" è ciò che ha reso un'applicazione basata documento. La decisione di utilizzare i Core Data è separata.

  2. Lo storyboard che si ottiene quando si esegue un'applicazione basata su OS X è un po 'atipico. Si noti che non vi è alcuna freccia nello storyboard che ti dice dove l'ingresso lo indica. Quello che succede è "Document" è istanziato. Ha un metodo:

    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) 
    } 
    

si va alla ricerca nella storyboard per un controller con l'identificatore @ "Documento Finestra Controller" (che dà il caso è che il regolatore di finestra). Il documento mantiene una collezione di windowController. così Documento lo istanzia e aggiunge il controllore della finestra a quella lista.

Così documento è già un riferimento al controller finestra Document.windowControllers

(Qualcuno può dirmi perché il documento viene creato anche se non riesco a vedere che cosa innesca in realtà la sua creazione?)

+0

Sembra che non otterrai una finestra per impostazione predefinita finché l'utente non crea un nuovo documento facendo clic sull'icona del dock. Probabilmente è meglio, dato che puoi mostrare qualcosa di simile a un elenco di file in icloud/hd come TextEdit o Pages invece è – Chris

+0

Deve esserci un messaggio automatico "newDocument:" che viene inviato quando apri un'app. Ciò ha senso. –