如何在Swift中使用UserDefaults保存默认打印机?

5

这是我的应用程序的工作流程: 用户可以从应用程序的设置页面选择默认打印机,并且每次打印都会直接使用此默认打印机而无需任何打印预览对话框

我们可以使用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中,因为它不是UserDefaults支持的类型。

是否有其他选项可以将UIPrinter保存到UserDefaults或者其他保存默认打印机的方式?


根据https://developer.apple.com/documentation/uikit/uiprinter,您可以保存打印机的URL,并从保存的URL重新创建打印机,但我自己从未尝试过。 - Martin R
1
请参考 https://dev59.com/DmrWa4cB1Zd3GeqP80BV#40610378 - 这是 Objective-C,但可以轻松转换为 Swift。 - Martin R
1个回答

3
您可以使用NSKeyedArchiver存储自定义对象。为了使其可编码,它们必须实现NSCoding协议。
但是您不能将UIPrinter实例存储在NSUserDefaults中。经过一些研究,我发现了这个链接。其说:

您不能将UIPrinter实例存储在NSUserDefaults中。您可以保存打印机的URL,然后当您的应用程序再次启动并需要UIPrinter时,从NSUserDefaults中读取URL,并使用UIPrinter printerWithURL:


这不需要 UIPrinter 符合 NSCoding 吗? - Martin R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接