Приложение имеет UIDocument, созданный из CollectionViewController. UIDocument использует обертки и autosaveWithCompletionHandler.Swift UIDocument autosave, вызванный после закрытия документа, и класс не deinit
class myDocument: UIDocument {
var wrapper: NSFileWrapper?
var data: [Int] = []
override internal func contentsForType(typeName: String) throws -> AnyObject {
// called by doc.saveToURL
return wrapper!
}
func SaveMyData() {
wrapper!.addRegularFileWithContents(.......)
self.updateChangeCount(.Done) // which eventually calls
// autosaveWithCompletionHandler which calls saveToURL
// which calls contentsForType
}
}
UICollectionViewController, который создает экземпляр UIDocument (и ViewController) просто хранит список ссылок из каталога приложения и обычных методов.
class DocChooserCollectionViewController: UICollectionViewController, UIGestureRecognizerDelegate {
let myExtension = "whatever"
var documents: [NSURL] = []
}
вопрос (ы): файл асинхронной сохранить через методы UIDocument может произойти также после того, как контроллер представления закрыт (секунд) и перераспределена и пользователь снова видит UICollectionViewController. Каков правильный способ поймать это и узнать, что произошло последнее спасение, чтобы таким образом установить свойство wrapper равным нулю и разрешить выпуск UIDocument? Я полагаю, что deinit() для viewController может установить свойство «done» в экземпляре UIDocument, но это не выглядит чистым и до сих пор не знает, когда установить свойство wrapper равным nil.
Спасибо!