Правильный способ открыть файл из строковых аргументов в приложении NSDocument swift - PullRequest
1 голос
/ 19 апреля 2020

Я работаю над приложением MacOS Document, которое открывает файл определенного типа. Я хочу написать несколько тестов пользовательского интерфейса для этого приложения, но я хочу загрузить некоторые фиктивные данные для этих тестов пользовательского интерфейса. Из того, что я понимаю, на самом деле мне следует использовать переменные 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. 2) как правильно открыть файл при запуске приложения, используя строковый аргумент.

1 Ответ

0 голосов
/ 19 апреля 2020

1) Как правильно передавать ложные данные для тестирования пользовательского интерфейса приложения на основе NSDocument?

Что я делаю, это следующее:

1) Чтобы открыть новый документ, я звоню makeUntitledDocument(ofType typeName: String). Нет необходимости переопределять это вообще. Затем вы можете настроить документ так же, как вы sh с возвращаемым значением этого API.

2) Чтобы открыть ранее сохраненный документ, я действительно вызываю 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

Это будет имитировать c, что делает Finder, но если вам не нравится этот вариант, то вы всегда можете попробовать то, что они предлагают в ответах на этот вопрос здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...