这解决了我的问题:
将 CoreData 属性名称设置为我的自定义 NSValueTransformer 子类:MQColorTransformer
实现了以下 NSValueTransformer 子类(它也将 UIColor 转换为 NSData,就像Schemetrical建议的那样,但它的优点是我仍然可以将 UIColor 分配给我的颜色属性,并且 NSValueTransformer 负责场景背后的转换):
NSValueTransformer 子类
import Foundation
import UIKit
@objc(MQColorTransformer) class MQColorTransformer: NSValueTransformer {
override class func transformedValueClass() -> AnyClass{
return NSData.classForCoder()
}
override func transformedValue(value: AnyObject!) -> AnyObject {
// Transform UIColor to NSData
let color = value as! UIColor
var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0
color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
var components:[CGFloat] = [red, green, blue, alpha]
let dataFromColors = NSData(bytes: components,
length: sizeofValue(components)*components.count)
return dataFromColors
}
override func reverseTransformedValue(value: AnyObject!) -> AnyObject {
// Transform NSData to UIColor
let data = value as! NSData
var components = [CGFloat](count: 4, repeatedValue:0)
var length=sizeofValue(components)
data.getBytes(&components, length: length * components.count)
let color = UIColor(red: components[0],
green: components[1],
blue: components[2],
alpha: components[3])
return color
}
}