将 UIPrinter 保存到 NSUserDefaults

Saving UIPrinter to 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"]; 保存时它崩溃了,我收到此消息作为错误 -[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];

当您再次需要同一台打印机时,使用您存储的 url 和 printerWithURL: 创建另一个 UIPrinter