Domanda

Voglio scrivere un programma che può avere più documenti in un'unica finestra tramite un'interfaccia a schede. Devo evitare l'architettura NSDocument (il modello di applicazione Cocoa documento-base)? Per quanto posso dire, supporta solo una o più finestre per documento, ma non viceversa.

Sono stato alle prese con questa domanda per un po 'e ho già costruito gran parte della mia applicazione sull'architettura NSDocument ma non riesco a capire un buon modo per associare più documenti con un'unica finestra.

EDIT: voglio avere le finestre dei documenti di progetto, oltre a finestre dei documenti di base. A questo livello di complessità, sarebbe ancora la pena di violazione al sistema l'architettura NSDocument? Apple ha fatto scrivere Xcode (che funziona in questo modo) utilizzando l'architettura NSDocument?

È stato utile?

Soluzione

Ho cercato shoehorning un app NSDocument in un'unica finestra a schede di interfaccia a pochi anni fa, e ha finito per così frustrato dopo pochi mesi sono andato indietro e refactoring i pezzi di architettura del documento. Non è impossibile, ma si finisce per lavorare in giro così tanti problemi che il risultato finale assomiglia a malapena una corretta NSDocument app. E 'meglio di riscrivere solo i bit si ha bisogno, di finire con un sacco di codice solo per sovvertire i quadri di cacao.

Altri suggerimenti

Ho lo stesso tipo di progetto - diversi documenti indipendenti che voglio presentare in una singola finestra, con una barra laterale che permette il passaggio tra i documenti - così ho fatto un po 'di ricerca me stesso.

Ho appena trovato un vantaggio interessante con la lettura di Cocoadev documento basato app con una finestra per tutti i documenti di riferimento. Sembra, dalla risposta di MikeTrent, che l'utilizzo di NSDocument è un modo molto praticabile per andare. Hai solo bisogno di sottoclasse NSDocumentController.

Mi piace anche un'idea di Abhi di utilizzare una finestra figlio senza bordi.

Utilizzando un'architettura basata NSDocument non è necessariamente una cattiva idea in questo caso; ma potrebbe richiedere un po 'di haquery.

E 'molto probabile che si avrà non solo sottoclasse NSDocument, ma anche che è più raramente sottoclasse fratello NSDocumentController. Una volta fatto questo, dovrebbe essere una semplice questione di dirottare e di evitare le chiamate verso -makeWindowControllers e altri metodi relativo alle finestre, che consente di avvolgere il documento "finestre" in qualsiasi modo vi piace, ma conservano ancora i benefici del documento- applicazione basata su.

Un'altra tecnica, che non ho ancora provato ma si prevede di, è quello di avere una finestra senza bordi per ogni documento. Questo documento modo ha una finestra, che può o non può essere visibile.

Poi, una finestra dell'involucro contenente il bordo della finestra attuale, e qualsiasi controllo per commutare tra cui la finestra documento senza bordi / finestre sono visibili. La finestra del documento è una finestra secondaria dell'involucro, che assicura entrambi saranno collegati quando una finestra viene spostata / minimizzata / chiuso / etc.

Per ogni finestra documento senza bordi, la finestra involucro ha una vista segnaposto che, quando ridimensionata, ridimensiona la finestra del documento, e anche iniettare vista della finestra del documento nella catena responder (ogni evento inviato alla vista segnaposto, sarà trasmesso alla visualizzazione della finestra del documento, prima di essere trasferito al vista padre del segnaposto).

Ci sono ancora alcuni dettagli minori a lavorare fuori, ma credo che questo approccio funziona bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top