2012-11-19 19 views
11

Ho avviato una piccola applicazione basata su documenti con un NSOutlineView nella finestra principale. Ho salvato il mio modello in file usando il protocollo NSCoding nelle classi modello e tutto va bene.Persa con la funzionalità di ripristino della finestra, salvataggio automatico nelle preferenze utente e salvataggio nel modello per NSDocument

Avanti Volevo salvare l'interfaccia utente (dimensioni e posizione della finestra, elementi espansi nella vista struttura, selezione, ...) e ho trovato la funzione Riprendi aggiunta a Lion.

Così ho provato per la sua attuazione, ho aggiunto un nome di salvataggio automatico alla finestra principale e la vista struttura, impostare la proprietà autosaveExpandedItems e implementato l'outlineView: itemForPersistentObject: e outlineView: persistentObjectForItem: metodo nella fonte di dati di vista struttura.

Questo funziona ma quando creo/apro un altro file e lo chiudo, lo stato degli elementi espansi degli altri file viene impostato con lo stato del file chiuso.

È come se l'app salvasse solo una finestra per tutti i documenti e non una finestra per documento.

Sono un po 'perso con il salvataggio automatico e riprendere, è la stessa funzione o due funzionalità completamente diverse?

Posso usarlo per salvare lo stato della finestra o ho bisogno di salvarlo nel mio modello?

Grazie

risposta

0

Mi rendo conto che è di circa 3 anni di ritardo, ma forse questo aiuterà tutti coloro che finisce qui.

Non sono ancora un esperto di Cocoa o sviluppatore Mac professionale (sto ancora imparando), quindi temo di poter offrire solo un po 'di intuizione (avendo lavorato io stesso a un'applicazione basata su documenti).

Potrebbe essere il caso che l'implementazione dei dati di stato di salvataggio su una finestra e per base di controllo è semplicemente collegandola a una singola istanza (poiché è tutto pre-caricato in xibs e legato a un singolo nome di salvataggio automatico), ma Potrei sbagliarmi su questo. Chiunque sia più esperto è libero di correggermi.

Forse provare e salvare le informazioni di stato a livello NSDocument invece che per la finestra, quindi implementare window(window: NSWindow, willEncodeRestorableState state: NSCoder) e window(window: NSWindow, didDecodeRestorableState state: NSCoder) per estrarre i dati del documento.

È possibile, naturalmente, accedere facilmente il documento per la finestra corrente: view.window?.windowController?.document as? YourNSDocumentSubclass

Questo è più o meno quello che sto facendo, e sembra essere promettente finora. Altri guru dell'architettura possono offrire maggiori informazioni.