Swift 文档关闭后调用 UIDocument 自动保存,class 不取消初始化
Swift UIDocument autosave called after document closes and class doesn't deinit
应用具有从 CollectionViewController 创建的 UIDocument。 UIDocument 使用包装器和 autosaveWithCompletionHandler。
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
}
}
创建 UIDocument 实例(和 viewController)的 UICollectionViewController 只保留来自应用程序目录和常用方法的 url 列表。
class DocChooserCollectionViewController: UICollectionViewController, UIGestureRecognizerDelegate {
let myExtension = "whatever"
var documents: [NSURL] = []
}
问题是:通过 UIDocument 方法保存的异步文件可以在视图控制器关闭(几秒后)并解除分配并且用户再次看到 UICollectionViewController 之后很好地发生。捕获它并知道最终保存已经发生的正确方法是什么,从而将包装器 属性 设置为 nil 并允许释放 UIDocument?我猜 viewController 的 deinit() 可以在 UIDocument 的实例中设置一个 'done' 属性,但这听起来不干净而且仍然不知道什么时候设置包装器 属性 到 nil.
谢谢!
解决了文档保存异步和 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 显示正在释放内存,trace 显示正在保存 doc 并且 UIDocument 已取消初始化。
应用具有从 CollectionViewController 创建的 UIDocument。 UIDocument 使用包装器和 autosaveWithCompletionHandler。
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
}
}
创建 UIDocument 实例(和 viewController)的 UICollectionViewController 只保留来自应用程序目录和常用方法的 url 列表。
class DocChooserCollectionViewController: UICollectionViewController, UIGestureRecognizerDelegate {
let myExtension = "whatever"
var documents: [NSURL] = []
}
问题是:通过 UIDocument 方法保存的异步文件可以在视图控制器关闭(几秒后)并解除分配并且用户再次看到 UICollectionViewController 之后很好地发生。捕获它并知道最终保存已经发生的正确方法是什么,从而将包装器 属性 设置为 nil 并允许释放 UIDocument?我猜 viewController 的 deinit() 可以在 UIDocument 的实例中设置一个 'done' 属性,但这听起来不干净而且仍然不知道什么时候设置包装器 属性 到 nil.
谢谢!
解决了文档保存异步和 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 显示正在释放内存,trace 显示正在保存 doc 并且 UIDocument 已取消初始化。