代码之家  ›  专栏  ›  技术社区  ›  Kamil

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

  •  0
  • Kamil  · 技术社区  · 7 年前

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

    有什么帮助吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Saad Chaudhry    7 年前

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

    只能序列化某些UIColor对象。

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

    然后,在initWithCoder中:您应该去除图像并从中创建新的UIColor 看看这个 link (首选)以及 link .

    当您创建 UIColor color = [UIColor colorWithPatternImage:selectedImage] ,同时设置关联的对象 在颜色上 [color setAssociatedObject:selectedImage] .