Swift UIDocument自动保存在文档关闭后调用,类没有取消

时间:2016-02-22 05:12:58

标签: ios swift uidocument

App具有从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实例中的属性,但听起来并不干净,但仍然不知道何时将包装器属性设置为nil。

谢谢!

1 个答案:

答案 0 :(得分:0)

解决了文档保存异步和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")
        }
    })
}

仪器显示内存正在发布,跟踪显示doc正在保存,UIDocument已被删除。