2009-07-12 15 views
7

Desidero scrivere un'applicazione che potrebbe contenere più documenti in un'unica finestra tramite un'interfaccia a schede. Dovrei evitare l'architettura NSDocument (il modello di applicazione basato sul documento Cocoa)? Per quanto posso dire, supporta solo una o più finestre per documento, ma non viceversa.Più documenti in una singola finestra in cacao

Sono stato a lottare 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 una singola finestra.

MODIFICA: desidero avere finestre di documento di progetto oltre alle finestre di documento di base. A questo livello di complessità, varrebbe ancora la pena di hackerare l'architettura NSDocument? Apple ha scritto Xcode (che funziona in questo modo) usando l'architettura NSDocument?

+0

sembra che xcode utilizzi effettivamente NSDocument, ma la finestra che ha più schede nel progetto è solo un documento (i progetti) – cobbal

+1

anche, uno strumento davvero divertente per curiosare nelle app di cacao per vedere come lo fanno è F-Script http://www.fscript.org/ – cobbal

+0

@cobbal: interessante. Ciò implica che i file di testo non sono rappresentati come NSDocuments? – titaniumdecoy

risposta

3

Ho provato a scrivere un'applicazione NSDocument in un'interfaccia a schede a finestra singola alcuni anni fa, e sono finito in modo così frustrato dopo alcuni mesi che sono tornato indietro e ho rifattorizzato le parti dell'architettura del documento. Non è impossibile, ma finisci per lavorare su così tanti problemi che il risultato finale assomiglia a malapena a una app NSDocument appropriata. È meglio riscrivere semplicemente i bit di cui hai bisogno, piuttosto che finire con un sacco di codice solo per sovvertire i framework Cocoa.

+0

Non è molto più codice che puoi [leggi dalla mia guida qui] (http://cutecoder.org/programming/window-multiple-documents/). – adib

4

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

È molto probabile che non si debba solo creare una sottoclasse di NSDocument, ma anche che sia più raramente sottoclasse di NSDocumentController. Una volta fatto questo, dovrebbe essere semplice sottrarre ed evitare chiamate a -makeWindowControllers e altri metodi relativi alle finestre, che ti permettono di avvolgere il documento "windows" in qualsiasi modo desideri, ma mantengono comunque i benefici del documento- applicazione basata.

2

Un'altra tecnica, che non ho ancora provato ma pianificato, è di avere una finestra senza bordi per ogni documento. In questo modo un documento ha una finestra, che può essere o non essere visibile.

Quindi, disporre di una finestra wrapper contenente il bordo della finestra effettivo e di eventuali controlli per passare da quale finestra/finestra del documento senza bordi sono visibili. La finestra del documento è una finestra secondaria del wrapper, che garantisce che entrambi saranno collegati quando una finestra viene spostata/ridotta/chiusa/ecc.

Per ciascuna finestra del documento senza bordi, la finestra del wrapper ha una vista segnaposto che, una volta ridimensionata, ridimensiona la finestra del documento e inserisce anche la vista della finestra del documento nella catena del risponditore (qualsiasi evento inviato alla vista segnaposto sarà inviato alla vista della finestra del documento prima di essere trasferito alla vista padre del segnaposto).

Ci sono ancora alcuni dettagli minori da risolvere, ma penso che questo approccio funzionerà bene.

+1

Suggerimento molto interessante. – KPM

5

Ho lo stesso tipo di progetto: diversi documenti indipendenti che desidero presentare in un'unica finestra, con una barra laterale che consente di passare da un documento all'altro, quindi ho eseguito un po 'di ricerche.

Ho appena trovato un vantaggio interessante leggendo il numero Document Based App With One Window For All Documents di Cocoadev. Dalla risposta di MikeTrent sembra che usare NSDocument sia una strada molto valida. Hai solo bisogno di sottoclasse di NSDocumentController.

Mi piace anche Abhi's idea per utilizzare una finestra figlio senza bordi.

+1

Il primo collegamento è rotto – rraallvv

+1

Risolto il collegamento. – KPM

Problemi correlati