【发布时间】:2015-01-19 01:38:56
【问题描述】:
我正在尝试使用可转换属性类型加密和解密核心数据中的用户密码。这是我的NSValueTransformer 子类:
@objc (PasswordTransformer) class PasswordTransformer: NSValueTransformer {
override class func transformedValueClass() -> AnyClass {
return NSData.self
}
override class func allowsReverseTransformation() -> Bool {
return false
}
override func transformedValue(value: AnyObject?) -> AnyObject? {
if let string = value as? String {
let tuple = Utils.encryptString(string)
let first = tuple.0 as NSData?
if first != nil {
return first!
}
}
return nil
}
}
我想要发生的是当我像这样设置用户的密码时:user.password = "somepassword",密码应该自动加密并使用我的Utils.encryptString() 函数返回为NSData(它建立在@之上987654326@)。然后,当我检索该属性的值时,它应该返回 NSData 对象。相反,我的转换器子类永远不会被调用,并且密码属性仍然是一个明文字符串,我绝对不想发送到我的服务器。
我在我的 CoreData 模型文件中指定了值转换器并注册为在我的 NSManagedObject 子类中转换的值,所以我知道这不是问题。当我将密码设置为字符串时,是否有任何原因不会自动转换?转换的值是否仅在保存到核心数据上下文时使用,而不是在有人尝试访问该属性时使用?
【问题讨论】: