使用NSDocument保存文件的最佳方法?

时间:2017-06-19 19:14:53

标签: swift3 nsdocument swift4

我在保存文档时遇到问题,我在调试区域可以看到:

NSFileVersion tried to tried to add a new generation and failed. Versioned file URL: file:///Users/mike97/Downloads/test%20copy.xml, contents URL: file:///Users/mike97/Downloads/test%20copy~.xml, error: Error Domain=GSLibraryErrorDomain Code=2 "Unable to open /Users/mike97/Downloads/test copy~.xml" UserInfo={NSDescription=Unable to open /Users/mike97/Downloads/test copy~.xml, NSUnderlyingError=0x608000856020 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory" UserInfo={NSDescription=No such file or directory}}}
2017-06-19 20:19:53.069020+0200 XML Parser[2095:54823] NSDocument failed to preserve the old version of a document. Here's the error:
Error Domain=GSLibraryErrorDomain Code=2 "Unable to open /Users/mike97/Downloads/test copy~.xml" UserInfo={NSDescription=Unable to open /Users/mike97/Downloads/test copy~.xml, NSUnderlyingError=0x608000856020 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory" UserInfo={NSDescription=No such file or directory}}}
2017-06-19 20:19:53.118611+0200 XML Parser[2095:54823] <XML_Parser.Document: 0x6000001014d0>: An error occurred while attempting to preserve the backup file at file:///Users/mike97/Downloads/test%20copy~.xml: Error Domain=GSLibraryErrorDomain Code=2 "Unable to open /Users/mike97/Downloads/test copy~.xml" UserInfo={NSDescription=Unable to open /Users/mike97/Downloads/test copy~.xml, NSUnderlyingError=0x608000856020 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory" UserInfo={NSDescription=No such file or directory}}} ##

应用程序尝试以原子方式保存名为“test copy.xml”的文件并执行此操作只是将该文件重命名为“test copy~.xml”,为什么找不到原始文件。实际上更改选项参数保存数据错误消失了。 这是我在NSDocument子类中使用的代码:

    override func writeSafely(to url: URL, ofType typeName: String, for saveOperation: NSDocument.SaveOperationType) throws {
            if let vc = self.windowController?.contentViewController as? ViewController {
                switch typeName {
                case "XML v1":
                    do {
                        try vc.parser?.save().write(to: url, options: [])
                    } catch  {
                        throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
                    }
                    break
..

NSData.WritingOptions我们可以找到一些保存文件的选项,但我不确定我需要什么。任何人都想用我选择的'writeSafely'方法来解释我们是什么以及什么是最好的?

此方法也处理可能的错误,因此非原子写操作似乎已足够,但我想知道如何通过macOS保留'版本控制'功能。

0 个答案:

没有答案