将UIPrinter保存到NSUserDefaults

我试图保存这样的UIPrinter对象。

-(IBAction)setPrinterInSettings:(id)sender{ UIPrinterPickerController *picker = [UIPrinterPickerController printerPickerControllerWithInitiallySelectedPrinter:self.SavedPrinter]; [picker presentFromRect:self.settingsButton.frame inView:self.view animated:YES completionHandler:^(UIPrinterPickerController *controller, BOOL userDidSelect, NSError *err) { if (userDidSelect) { self.SavedPrinter = controller.selectedPrinter; NSLog(@"self.SavedPrinter == %@",self.SavedPrinter); [self saveCustomObject:self.SavedPrinter key:@"SavedPrinter"]; [[NSUserDefaults standardUserDefaults] setObject:self.SavedPrinter forKey:@"SavedPrinter"]; [[NSUserDefaults standardUserDefaults] synchronize]; } }]; } 

当我尝试保存在[[NSUserDefaults standardUserDefaults] setObject:self.SavedPrinter forKey:@"SavedPrinter"];时,它崩溃了[[NSUserDefaults standardUserDefaults] setObject:self.SavedPrinter forKey:@"SavedPrinter"]; 我将此消息作为错误-[UIPrinter encodeWithCoder:]: unrecognized selector sent to instance 0x7fb204062760 。 我需要它来记住用户选择的打印机并记住它,即使应用程序退出后台。 如果任何人可以帮助那将是伟大的!

您无法在NSUserDefaults存储UIPrinter实例。 您可以做的是保存打印机的URL,然后当您的应用程序再次启动并且您需要UIPrinter ,请从NSUserDefaults读取URL并使用UIPrinter printerWithURL: .

您应该使用url属性以使用setURL:forKey:保存在NSUserDefaults

像这样的东西:

 NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; [defaults setURL:[self.SavedPrinter url] forKey:@"printer.url"]; [defaults synchronize]; 

当您再次需要相同的打印机时,使用printerWithURL:创建另一个printerWithURL:使用您存储的URL。