将 UIPrinter 保存到 NSUserDefaults

Posted

技术标签:

【中文标题】将 UIPrinter 保存到 NSUserDefaults【英文标题】:Saving UIPrinter to NSUserDefaults 【发布时间】:2016-05-11 22:50:43 【问题描述】:

我正在尝试像这样保存 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 不符合这些要求。 @rmaddy 是的,我确实重做并删除了我的第一个问题,并且我确实查看了文档,我知道您无法使用 NSUserDefaults 保存 UIPrinters。这就是我寻求帮助的原因 【参考方案1】:

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

【讨论】:

【参考方案2】:

您应该使用url 属性将NSUserDefaultssetURL:forKey: 一起保存。

类似这样的:

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

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

【讨论】:

以上是关于将 UIPrinter 保存到 NSUserDefaults的主要内容,如果未能解决你的问题,请参考以下文章

将 Swift 3.0 的选择器转换为 2.2

iOS学习笔记32-iCloud入门

iOS 应用内购买无后端

使用NSUserDefault存储大量数据有啥缺点

R语言将多张可视化结果图像保存到PDF中实战:多图保存到同一PDF页将多个绘图保存到PDF格式的不同页面

如何直接保存到持久存储,而不将数据保存到内存中