Mam aplikację opartą na NSDocument z podklasą NSDocumentController. Mój dokument NSD współpracuje zarówno z adresami URL, jak i adresami URL z niestandardowym schematem korzystającym z usługi internetowej.Aplikacja oparta na dokumentach nie odtwarza dokumentów z adresami URL nie będącymi plikami
Obsługuję większość operacji ładowania i zapisywania przy użyciu niestandardowego kodu, w tym -saveToURL:ofType:forSaveOperation:completionHandler:
. +autosavesInPlace
zwraca YES
.
Problem, który mam: dokumenty z niestandardowym schematem URL nie są przywracane podczas uruchamiania. Dokumenty ze schematem URL pliku to - zarówno zwykłe dokumenty zapisane w plikach, jak i dokumenty bez tytułu, które są automatycznie zapisywane.
Po pozostawieniu otwartych dokumentów serwerowych i zamknięciu aplikacji, żadne metody NSDocument nie są wywoływane przy ponownym uruchomieniu. W szczególności, żaden z czterech inicjalizatorów nazywa się:
- -init
- -initWithContentsOfURL: ofType: error:
- -initForURL: withContentsOfURL: ofType: error:
- -initWithType: error:
Metoda NSDocumentController -reopenDocumentForURL:withContentsOfURL:display:completionHandler:
również nie jest nazywana.
W jaki sposób i kiedy dokument jest kodowany jako "przywracany"? Jak i kiedy są dekodowane?
To była bardzo pomocna pomoc w rozpoczęciu pracy. Okazuje się, że historia jest bardziej skomplikowana: to w rzeczywistości NSDocument, a nie NSWindow, który jest odpowiedzialny za kodowanie stanu * document * (numerowane ID, URL, ma ostatnie zmiany, typ) we własnej implementacji '-encodeRestorableStateWithCoder:'. NSDocumentController używa tych informacji o stanie do przywrócenia dokumentu, a następnie wywołuje '-makeWindowControllers' i NSApplication (lub program obsługi zakończenia NSApplication?) Przywraca okno. Ponadto, gdy używana jest niestandardowa podklasa NSDocumentController, AppKit ustawia * tę * klasę jako 'restorationClass'. – paulmelnikow