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