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

How to save a default printer in UserDefaults in Swift?

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

我们可以 select 打印机使用 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 或任何其他方式来保存默认打印机。

您可以按 NSKeyedArchiver 存储自定义对象。为了使其可编码,他们必须实现 NSCoding 协议。

但是您不能在 NSUserDefaults 中存储 UIPrinter 实例。经过一些研究,我发现 。其中说:

You can't store a UIPrinter instance in NSUserDefaults. What you can do is save the printer's URL and then when your app starts again and you need the UIPrinter, read the URL from NSUserDefaults and use UIPrinter printerWithURL:.