2016-02-22 4 views
1

Приложение имеет 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.

Спасибо!

ответ

0

Решил проблемы с сохранением памяти async и UIDocument. В контроллере представления:

deinit { 
    print("myViewController is being deinitialized") 
    doc.CloseNow() 
} 

И в моем UIDocument подкласса:

func CloseNow() { 
    self.closeWithCompletionHandler({(success) in 
     if (success) { 
      print("close succeeded") 
     } else { 
      print("close failed") 
     } 
    }) 
} 

Instruments показывает память высвобождается, и след показывает документ в настоящее время сохраняются и UIDocument является Deinit-е изд.

Смежные вопросы