Как сохранить принтер по умолчанию в UserDefaults в Swift?

Это рабочий процесс моего приложения: Пользователь может выбрать принтер по умолчанию на странице настроек приложения и будет использовать этот принтер по умолчанию для печати каждый раз напрямую без диалога предварительного просмотра печати.

Мы можем выбрать принтер, используя UIPrinterPickerController:

let printerPicker = UIPrinterPickerController(initiallySelectedPrinter: nil)
printerPicker.present(from: CGRect(x: 0, y: 0, width: 600, height: 500), in: self, animated: true) { (printerPicker, userDidSelect, error) in
    if userDidSelect {
        //Here get the selected UIPrinter
        let defaultPrinter = printerPicker.selectedPrinter
    }
}

После получения UIPrinter мы не можем напрямую сохранить объект UIPrinter в UserDefaults, который не является типом поддержки UserDefault.

Есть ли другие варианты сохранения UIPrinter в UserDefaults или любой другой способ сохранить принтер по умолчанию.


person anas.p    schedule 25.01.2018    source источник
comment
Согласно developer.apple.com/documentation/uikit/uiprinter, вы можете сохранить URL-адрес принтера и воссоздать принтер из этого сохраненного URL-адреса, но я никогда не пробовал это делать сам.   -  person Martin R    schedule 25.01.2018
comment
См. также stackoverflow.com/a/40610378 — это Objective-C, но его легко перевести на Swift.   -  person Martin R    schedule 25.01.2018


Ответы (1)


Пользовательские объекты можно сохранять с помощью NSKeyedArchiver. Для того, чтобы его можно было кодировать, они должны реализовать протокол NSCoding.

Но вы не можете хранить экземпляр UIPrinter в NSUserDefaults. После некоторых исследований я нашел эту ссылку. Что говорит:

Вы не можете хранить экземпляр UIPrinter в NSUserDefaults. Что вы можете сделать, так это сохранить URL-адрес принтера, а затем, когда ваше приложение снова запустится и вам понадобится UIPrinter, прочитайте URL-адрес из NSUserDefaults и используйте UIPrinter printerWithURL:.

person Arnab    schedule 25.01.2018
comment
Разве это не требует, чтобы UIPrinter соответствовал NSCoding? - person Martin R; 25.01.2018