【问题标题】:ios - Converting UIColor to NSData gives error when color has a patternios - 当颜色有图案时,将 UIColor 转换为 NSData 会出错
【发布时间】:2018-02-21 12:21:35
【问题描述】:

我想将UIColor 对象转换为NSData,以便可以使用NSUserDefaults 保存它。以下代码有效:

NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:[UIColor redColor]];

但是,如果我使用如下图像创建颜色:

UIImage *img  = [UIImage imageNamed:@"mypattern.png"];
UIColor *c = [UIColor colorWithPatternImage:img];
NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:c];

我收到以下错误:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Only RGBA or White color spaces are supported in this situation.'

有什么帮助吗?

【问题讨论】:

  • 设置色彩空间。

标签: ios objective-c nsdata uicolor nskeyedarchiver


【解决方案1】:

这里需要了解简单的UIColor 转换和从colorWithPatternImageconversion 提取颜色到NSData 之间的区别。

您只能序列化某些 UIColor 对象。

您需要存储用于创建图案的图像,而不是序列化 UIColor。在您的 encodeWithCoder 中执行此操作:

然后,在您的 initWithCoder: 中,您应该解压缩图像并从中创建一个新的 UIColor 看看这个link(首选)和这个link

当你创建你的UIColor color = [UIColor colorWithPatternImage:selectedImage] 时,还要设置关联的对象 关于颜色[color setAssociatedObject:selectedImage]

【讨论】:

  • "您需要存储创建图案的图像,而不是序列化 UIColor。"阙!?
猜你喜欢
  • 2020-04-28
  • 2017-08-11
  • 2019-11-21
  • 2013-11-17
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 2011-04-17
相关资源
最近更新 更多