ios - 当颜色有模式时,将 UIColor 转换为 NSData 会出错

ios - Converting UIColor to NSData gives error when color has a pattern

我想将 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.'

有什么帮助吗?

这里需要理解简单UIColor转换和colorWithPatternImage转换成NSData的提取颜色之间的区别。

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

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

然后,在您的 initWithCoder: 中,您应该取消归档图像并从中创建一个新的 UIColor 看看这个 link (preferred) and this link .

When you create your UIColor color = [UIColor colorWithPatternImage:selectedImage], also set the associated object on the color [color setAssociatedObject:selectedImage].