Ho un'applicazione basata su NSDocument con una sottoclasse NSDocumentController. Il mio NSDocument funziona con entrambi gli URL di file e URL con uno schema personalizzato che utilizza un servizio web.L'applicazione basata su documenti non ripristina i documenti con URL non file
Gestisco gran parte del caricamento e del salvataggio utilizzando un codice personalizzato, incluso -saveToURL:ofType:forSaveOperation:completionHandler:
. +autosavesInPlace
restituisce YES
.
Il problema riscontrato: i documenti con lo schema URL personalizzato non vengono ripristinati all'avvio. I documenti con lo schema URL file sono - sia i documenti normali salvati in file, sia i documenti senza titolo che sono salvati automaticamente.
Dopo aver lasciato aperti i documenti basati su server e chiuso l'app, nessun metodo NSDocument sembra essere richiamato al riavvio. In particolare, nessuno dei quattro inizializzatori si chiama:
- -init
- -initWithContentsOfURL: OfType: errore:
- -initForURL: withContentsOfURL: OfType: errore:
- -initWithType: errore:
Il metodo NSDocumentController -reopenDocumentForURL:withContentsOfURL:display:completionHandler:
non viene chiamato neanche.
Come e quando viene codificato lo stato ripristinabile dei documenti? Come e quando vengono decodificati?
Questo è stato un grande aiuto per iniziare. Si scopre che la storia è più complicata: in realtà è NSDocument, non NSWindow, che è responsabile della codifica dello stato * document * (ID numerato, url, ha cambiamenti recenti, tipo) nella sua implementazione di '-encodeRestorableStateWithCoder:'. NSDocumentController utilizza le informazioni di stato per ripristinare il documento, quindi richiama '-makeWindowControllers' e NSApplication (o il gestore di completamento di NSApplication?) Ripristina la finestra. Inoltre, quando si utilizza una sottoclasse personalizzata di NSDocumentController, AppKit imposta * that * class come 'restorationClass'. – paulmelnikow