首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIDocument saveToURL删除原始文件

UIDocument saveToURL删除原始文件
EN

Stack Overflow用户
提问于 2022-01-25 10:09:24
回答 2查看 51关注 0票数 0

我试图使用-[UIDocument saveToURL:(NSURL *)url forSaveOperation:(UIDocumentSaveOperation)saveOperation completionHandler:(void (^ __nullable)(BOOL success))completionHandler]在一个新的URL上保存一个副本,但是当这样做时,原始文件-[UIDocument fileURL]被删除了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-25 10:09:24

我找不到任何有关这方面的文档,但它似乎是有意的。¯\_(ツ)_/¯这里是iOS 15.2的Hopper反汇编:

票数 0
EN

Stack Overflow用户

发布于 2022-09-02 07:59:52

是的,UIDocument就是这么做的。好痛啊。

如果要将UIDocument保存到新的URL而不丢失原始URL,则可以使用如下函数进行保存:

代码语言:javascript
复制
func saveDocument(_ document: UIDocument, asCopyTo url: URL, completion: @escaping (Bool, Error?) -> Void) {
    let oldUrl = document.fileURL
    document.save(to: url, for: .forOverwriting) { success in
        if success {
            do {
                try FileManager.default.copyItem(at: url, to: oldUrl)
            } catch let error {
                completion(false, error)
            }
        }
        completion(success, nil)
    }
}

这首先将现有文档保存在其新的url中,更新fileURL,使UIDocument对象保持当前状态,并且不再继续保存旧文件。一旦完成,并假设它成功,我们将使用FileManager将新文件的数据复制回原来的位置。

在文件的原始位置删除和重新创建文件似乎很奇怪,我同意UIDocument是一个非常可怕的创建,但这至少可以避免您不得不从文件系统重新加载文档来维护正确的位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70846786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档