代码之家  ›  专栏  ›  技术社区  ›  MH175

如何在不使用FileManager的情况下将UIDocument保存到新URL时防止文件名冲突

  •  0
  • MH175  · 技术社区  · 3 年前

    使用FileManager,可以使用 FileManager 方法 fileExists(atPath:) 将文件保存到应用程序沙盒时。

    但是,当直接与 UIDocument 保存方法 save(to:for:completion) 可以接受一个新的URL,该URL会在没有警告的情况下覆盖可能存在的内容,从而很容易意外覆盖文件。事实上,据我所知,没有一个UIDocument方法能够传达文档操作可能失败的详细信息。

    这种类型的检查是否仅适用于FileManager或其他框架?

    1.定义文档子类

    class TextDocument: UIDocument {
        var text: String?
    }
    

    2.获取文档目录的URL

    let documentsDirectory = FileManager.default.urls(for: .documentDirectory, 
                                                      in: .userDomainMask).first!
    

    3.创建2个文档并保存

    let doc1 = TextDocument(fileURL: documentsDirectory
                                .appendingPathComponent("File 1")
                                .appendingPathExtension("txt"))
    let doc2 = TextDocument(fileURL: documentsDirectory
                                .appendingPathComponent("File 2")
                                .appendingPathExtension("txt"))
    
    doc1.save(to: doc1.fileURL, for: .forCreating) { success in
        print(success) // prints true
    }
    
    doc2.save(to: doc2.fileURL, for: .forCreating) { success in
        print(success) // prints true
    }
    

    4.问题:将doc1保存到doc2的URL会覆盖doc2而不发出警告。

    doc1.save(to: doc2.fileURL, for: .forOverwriting) { success in
        print(success) // prints true
    }
    
    0 回复  |  直到 3 年前