从NSColor数据创建UIColor

3

我有一个CoreData的Mac应用程序,我正在为它编写一个iOS前端。目前一切都很顺利,我可以成功地在iOS版本中读取使用Mac应用程序创建的文件。但是我无法将以NSData对象存储为数据模型中的NSColor数据读入到iOS版本应用程序中的UIColor对象中。

总结一下:我该如何将包含归档的NSColor对象的NSData对象转换为iOS设备上适当的UIColor对象?


3
正如Dave DeLong所指出的,你无法在iOS端将归档数据还原为NSColor对象。因此,你可能需要将组件序列化(例如作为NSArray),或创建一个两个平台都能理解的自定义类。 - warrenm
1
warrenm 给出了正确的答案。你不能直接使用 NSColor/UIColor。你可以创建自己的 NSObject 子类,包含 RGBA 成分并进行归档,或者直接归档这些值。 - Dave DeLong
同意。要实现这个功能需要对Mac OS代码进行一些重大更改,因此我不愿立即采取行动,但我会在下一个版本中解决它,并计划iOS版本的相关工作。谢谢。 - Jeff Hellman
2个回答

2

到目前为止,我所做的事情(虽然不太美观)是将NSData读入NSString中(数据似乎是ASCII编码的)。 RGB值存在于NSString中,稍加解析即可提取出来创建一个新的UIColor。

我不确定这是一个全局解决方案还是只在我的情况下有效,但这是一个开始。

显然,更好的方法是序列化为NSArray,我将来会研究一下。


1

请查看Core Data编程指南中的以下内容:

您尝试将NSColor替换为UIColor了吗? UIColor实现了NSCoding协议。

// - (NSColor *)color
- (UIColor *)color
{

    [self willAccessValueForKey:@"color"];

    // NSColor *color = [self primitiveColor];
    UIColor *color = [self primitiveColor];

    [self didAccessValueForKey:@"color"];

     if (color == nil)

    {

        NSData *colorData = [self colorData];

        if (colorData != nil)

        {

            color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];                

            [self setPrimitiveColor:color];

        }

    }

    return color;

}

1
据我所知,这个失败是因为UIKit无法解档和解码一个NSColor类的对象。 - Jeff Hellman
好的,那么请看这个 Stack Overflow 的问题:https://dev59.com/KUzSa4cB1Zd3GeqPjh3E - falconcreek
1
也许我理解有误,但是你链接的问题似乎展示了如何序列化和存储UIColor。这不是我的问题。我有一个序列化的NSColor,我需要将其读入UIColor中。此外,UIColor并不符合你回答中所述的NSCoder...感谢你的帮助。这真的是我在iOS上读取Mac OS Coredata文件时遇到的唯一麻烦点。到目前为止。 - Jeff Hellman
根据文档,UIColor符合NSCoding协议。http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIColor_Class/Reference/Reference.html。您是否有一个想要实例化为UIColor的示例NSColor? - falconcreek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接