2012-11-19 14 views
11

ich in Modell speichert eine kleines Dokument basierte Anwendung mit einem NSOutlineView auf dem Hauptfenster gestartet. Ich habe mein Modell in Dateien mit NSCoding-Protokoll in den Modellklassen gespeichert und alles ist in Ordnung.mit Fenstern Fortsetzungsfunktion, die automatischen Speicherung in Benutzereinstellungen verloren und für NSDocument

Als nächstes wollte ich die Benutzeroberfläche (Fenstergröße und -position, erweiterten Elemente in der Gliederungsansicht, Auswahl, ...) speichern und ich fand die Resume-Funktion Lion hinzugefügt.

Also habe ich versucht, es zu implementieren, ich fügte einen Autosave-Namen zum Hauptfenster und der Gliederungsansicht hinzu, legte die AutosaveExpandedItems-Eigenschaft fest und implementierte die outlineView: itemForPersistentObject: und outlineView: persistentObjectForItem: -Methode in der Datenquelle der Gliederungsansicht.

das funktioniert, aber wenn ich erstellen/öffnet eine andere Datei, um sie dann schließen, die erweiterte Elemente Zustand der anderen Dateien werden mit dem Zustand der geschlossenen Datei.

Es ist wie die App nur ein Fenster für alle Dokumente gespeichert und nicht ein Fenster pro Dokument.

Ich bin ein bisschen mit automatischen Speichern und Lebenslauf verloren, ist es die gleiche Funktion oder zwei Funktionen ganz anderes?

Kann ich es Fenster Zustand zu speichern, oder muss ich es in meinem Modell zu retten?

Danke

Antwort

0

Ich weiß, das über 3 Jahre zu spät, aber vielleicht wird dies jeden, der hier landet helfen.

Ich bin noch kein Cocoa-Experte oder professioneller Mac-Entwickler (lerne immer noch), daher kann ich leider nur ein wenig Einblick gewähren (nachdem ich selbst an einer dokumentenbasierten App gearbeitet habe).

Es kann der Fall sein, dass das Implementieren der Speicherzustandsdaten pro Fenster und pro Steuerbasis es einfach an eine einzelne Instanz bindet (da es alles in xibs vorinstalliert ist und an einen einzigen Autosave-Namen gebunden ist) Da könnte ich mich irren. Jeder, der besser informiert ist, kann mich korrigieren.

Vielleicht versuchen Sie, Ihre Statusinformationen auf der NSDocument-Ebene statt für das Fenster zu speichern, und implementieren Sie dann window(window: NSWindow, willEncodeRestorableState state: NSCoder) und window(window: NSWindow, didDecodeRestorableState state: NSCoder), um aus Ihren Dokumentdaten zu ziehen.

Sie können natürlich leicht das Dokument für das aktuelle Fenster aufzurufen: view.window?.windowController?.document as? YourNSDocumentSubclass

Dies ist mehr oder weniger, was ich tue, und es scheint so weit vielversprechend. Andere Architekturgurus können mehr Einblick gewähren.