我在xcdatamodel文件中设置了我的CoreData模型。
我的属性YYYY有一个可转换的类型,我在数据模型检查器中设置转换器名称。
我的情况是我在我的模型中存储[CLLocation]
。
class LocationArrayTransformer : NSValueTransformer {
override func transformedValue(value: AnyObject?) -> AnyObject? {
let locations = value as! [CLLocation]
return NSKeyedArchiver.archivedDataWithRootObject(locations)
}
override func reverseTransformedValue(value: AnyObject?) -> AnyObject? {
let data = value as! NSData
return NSKeyedUnarchiver.unarchiveObjectWithData(data)
}
}
这是我的价值转换器。
但不知何故,我仍然在控制台中收到警告:No NSValueTransformer with class name XXX was found for attribute YYYY on entity ZZZZ
任何想法为什么?
答案 0 :(得分:23)
我花了很多时间来分享我找到的解决方案:
我必须让Objc可以使用NSValueTransformer
子类。
@objc(LocationArrayTransformer)
class LocationArrayTransformer : NSValueTransformer {
....
}
这很简单。
正如@Sbooth指出的那样,Swift类是命名空间的。使用@objc
可以在没有命名空间的情况下使用该类。因此,将变压器名称设置为MyApp.Mytransformer
也很有效!