在Swift的NSDocument应用程序中,从行参数打开文件的正确方法是什么?

问题描述 投票:1回答:1

我正在开发一个基于MacOS Document的应用程序,它可以打开某个文件类型。我想做的是为这个应用程序编写一些UI测试,但我想为这些UI测试加载一些模拟数据。根据我的理解,我实际上应该使用 launchArguments 或 launchEnvironment 变量来加载这些模拟数据。

所以,在我看来,正确的做法是创建一些测试数据文件,并在应用程序启动时使用类似这样的东西打开这些文件。

let app = XCUIApplication()  
app.launchArguments.append("-url")  
app.launchArguments.append($PATH)  
app.launch()

现在我的问题是,我应该在哪里添加代码 在启动时打开一个文件?有没有一个NSDocumentDelegate的方法是我应该覆盖的?我应该调用 openDocument(withContentsOf:display:completionHandler:) 或者直接设置 fileURL 或者完全是其他的东西?

现在,我的应用程序打开最后一个打开的文件或打开一个新的文档。我可以尝试覆盖 makeUntitledDocument(ofType typeName: String)func restoreWindow(withIdentifier identifier: NSUserInterfaceItemIdentifier, state: NSCoder, completionHandler: @escaping (NSWindow?, Error?) -> Void) 但我觉得这两个选项都不对。

所以我想我有两个问题。1)什么是正确的方式来传递模拟数据,用于基于NSDocument的应用程序的UI测试。2)使用行参数在应用程序启动时打开文件的正确方法是什么。

swift macos xctest nsdocument
1个回答
1
投票

1)正确的方法是什么,为一个基于NSDocument的应用程序的UI测试传递模拟数据?

我所做的是以下几点。

1) 打开一个新文档,我调用 makeUntitledDocument(ofType typeName: String). 完全没有必要覆盖它。然后你就可以用这个API的返回值来设置你想要的文档。

2) 要打开一个先前保存的文档,我调用了 indeed openDocument(withContentsOf:display:completionHandler:)

使用伪代码将是这样的,你可以传递任何带有模拟数据的URL。

func openDocument(itemData:ItemData) {
  let controller = NSDocumentController.shared
   controller.openDocument(withContentsOf: itemData.url, display: true)
   { (_, _, error:Error?) in
        if error != nil {
             handleError(.unableToOpenDocument(itemData.url))
        }
    }
}

再一次,没有必要覆盖在上面 openDocument(withContentsOf:display:completionHandler:).

2) 在应用程序启动时使用行参数打开文件的正确方法是什么?

我会使用一个bash脚本。

open -a $APP_PATH $DOCUMENT_PATH

这将模仿Finder的做法 但如果你不喜欢这个选项 那么你可以试试他们在这个问题的答案中提出的建议。此处.

© www.soinside.com 2019 - 2024. All rights reserved.