2012-11-19 23 views
11

Zacząłem małą aplikację opartą na dokumencie z NSOutlineView w głównym oknie. Zapisałem mój model w plikach przy użyciu protokołu NSCoding w klasach modeli i wszystko jest w porządku.Utracono dzięki funkcji wznawiania okna, autozapisywania w preferencjach użytkownika i zapisywaniu w modelu dla NSDocument

Następnie chciałem zapisać interfejs użytkownika (rozmiar i położenie okna, rozwinięte elementy w widoku konspektu, wybór, ...) i znalazłem funkcję Wznów dodaną do Lwa.

Więc próbowałem go zaimplementować, dodałem nazwę automatycznego zapisu do głównego okna i widoku konspektu, ustawię właściwość autosaveExpandedItems i zaimplementowałem metodę outlineView: itemForPersistentObject: i outlineView: persistentObjectForItem: w źródle danych widoku konspektu.

To działa, ale gdy utworzę/otworzę inny plik, a następnie go zamknę, stan rozwiniętych elementów pozostałych plików zostanie ustawiony ze stanem zamkniętego pliku.

To tak, jakby aplikacja zapisywała tylko jedno okno dla wszystkich dokumentów, a nie jedno okno na dokument.

Jestem trochę zagubiony z autozapisu i wznowienia, czy to ta sama funkcja, czy dwie funkcje zupełnie inaczej?

Czy mogę go użyć do zapisania stanu okna lub potrzeby zapisania go w moim modelu?

Dziękuję

Odpowiedz

0

Zdaję sobie sprawę, jest to około 3 lat za późno, ale może to pomoże każdemu, kto kończy się tutaj.

Nie jestem ekspertem od kakao ani profesjonalnym programistą mac (wciąż się uczę), więc obawiam się, że mogę zaoferować tylko trochę wglądu (sam pracując nad aplikacją opartą na dokumencie).

Może się zdarzyć, że zaimplementowanie zapisanych danych stanu dla każdego okna i dla każdej kontroli będzie polegało na powiązaniu go z pojedynczą instancją (ponieważ wszystko jest wstępnie załadowane w formacie XIB i powiązane z pojedynczą nazwą automatycznego zapisu), ale Mogę się mylić. Każdy, kto jest bardziej kompetentny, może mnie poprawić.

Być może spróbuj zapisać informacje o stanie na poziomie NSDocument zamiast w oknie, a następnie zaimplementuj window(window: NSWindow, willEncodeRestorableState state: NSCoder) i window(window: NSWindow, didDecodeRestorableState state: NSCoder), aby pobrać dane z dokumentu.

Można, oczywiście, łatwo uzyskać dostęp do dokumentu dla bieżącego okna: view.window?.windowController?.document as? YourNSDocumentSubclass

To jest mniej więcej to, co robię, i to zdaje się być obiecujące tak daleko. Inni guru architektoniczni mogą zaoferować więcej wglądu.