【发布时间】:2017-03-12 16:58:05
【问题描述】:
我有一个 ValueTransformer 子类,它可以将日期转换为字符串以在 Core Data 中保留日期的原始时区。
transformedValue 和 reverseTransformedValue 都按预期调用,但没有调用类 func transformedValueClass()。
我猜 ValueTransformer 默认使用 NSData,因为我在保存后尝试保留值时收到的错误消息是:
[__NSCFString bytes]: 无法识别的选择器发送到实例
以下是我的代码的相关位:
@objc(DateValueTransformer)
class DateValueTransformer: ValueTransformer {
private let formatter = DateFormatterCache.sharedInstance.formatterWithFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ")
override class func transformedValueClass() -> AnyClass {
print("Anybody home??? Never called...")
return NSDate.self
}
override func transformedValue(_ value: Any?) -> Any? {
guard let date = value as? Date else {
return nil
}
return formatter.string(from: date)
}
override func reverseTransformedValue(_ value: Any?) -> Any? {
guard let dateString = value as? String else {
return nil
}
return formatter.date(from: dateString)
}
}
这是在 CoreData 中注册 ValueTransformer 的方式:
【问题讨论】:
-
你能显示调用你的类的代码吗?
-
当您在 xcdatamodel 文件中设置 ValueTransformer 时,CoreData 会在内部调用此类。没有显式调用此类的用户代码。
-
@jimj 类函数被称为 -: (classname.methodname)。这里的类名是您在其中创建方法的类的名称。例如:DateValueTransformer.transformedValueClass()。
-
@TusharSharma 我不确定我是否理解您的观点。这是一个重写的静态函数,应该由 CoreData 自动调用。我没有直接调用这个方法。
-
@jimj 我没用过,但这可能会有所帮助-:googleweblight.com/i?u=http://bluelemonbits.com/index.php/2016/…