【问题标题】:Create UIColor from NSColor Data从 NSColor 数据创建 UIColor
【发布时间】:2010-07-20 17:51:03
【问题描述】:

我有一个 CoreData Mac 应用程序,我正在为其编写 iOS 前端。到目前为止一切正常,我能够成功读取在 iOS 版本中使用 Mac 应用程序创建的文件。我正在努力解决如何将 NSColor 数据(在我的数据模型中存储为 NSData 对象)读入 iOS 版本应用程序中的 UIColor。

总结一下:如何获取一个包含已归档 NSColor 对象的 NSData 对象并将其转换为 iOS 设备上适当的 UIColor 对象?

【问题讨论】:

  • 正如 Dave DeLong 所指出的,您将无法在 iOS 端取消归档到 NSColor 对象。在这种情况下,您可能想要序列化组件(例如,作为 NSArray)或创建两个平台都可以理解的自定义类。
  • warrenm 有正确的答案。您将不必直接使用NSColor/UIColor。您可以使用 RGBA 组件创建自己的 NSObject 子类并将其存档,或者直接存档值。
  • 同意。实现这一点需要对发布 Mac OS 代码进行一些重大更改,所以我现在不愿意继续这样做,但我会在下一个修订版中解决它并围绕它计划 iOS 版本。谢谢。

标签: iphone cocoa core-data uikit


【解决方案1】:

到目前为止,我所做的(它有效,但并不漂亮)是将 NSData 读入 NSString(数据似乎是 ASCII 编码的)。 RGB 值存在于 NSString 中,只需稍加解析即可提取出新的 UIColor。

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

序列化为 NSArray 显然会更好,我会在未来研究它。

【讨论】:

    【解决方案2】:

    看看下面来自Core Data Programming Guide的内容

    您是否尝试将NSColor 替换为UIColorUIColor 实现了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;
    
    }
    

    【讨论】:

    • 据我所知,这失败了,因为 UIKit 无法解压缩和解码 NSColor 类的对象。
    • 好的。看看这个 SO question.stackoverflow.com/questions/2304882/…
    • 也许我读错了,但您的链接问题似乎显示了如何序列化和存储 UIColor。这不是我的问题。我有一个序列化的 NSColor,我需要将它读入 UIColor。此外, UIColor 不符合您的回答中所述的 NSCoder ......不过感谢您的帮助。这确实是我在 iOS 上读取 Mac OS Coredata 文件时遇到的唯一麻烦点。到目前为止。
    • 根据文档 UIColor 符合 NSCoding 协议。 developer.apple.com/iphone/library/documentation/UIKit/…。您是否有一个示例 NSColor 并希望将其实例化为 UIColor?
    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    相关资源
    最近更新 更多