我尝试使用可转换的属性类型加密和解密核心数据中的用户密码。这是我的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"
,密码应自动加密,并使用我的NSData
功能({1}}返回Utils.encryptString()
建立在RNEncryptor
之上。然后,当我检索该属性的值时,它应该返回NSData
对象。相反,我的变换器子类永远不会被调用,密码属性仍然是一个明文字符串,我绝对不想发送到我的服务器。
我在我的CoreData模型文件中指定了值转换器,并将其注册为在我的NSManagedObject
子类中转换的值,因此我知道这不是问题。有什么理由当我将密码设置为字符串时,它不会自动转换?转换的值是仅在保存到核心数据上下文时使用,而不是在有人试图访问该属性时使用吗?
答案 0 :(得分:0)
转换的值是仅在保存到核心数据上下文时使用,而不是在有人试图访问该属性时使用吗?
这是对的。值转换器的目的是将内存中的对象转换为持久性存储文件中的不同类型的对象。通常这意味着在加载数据时保存和反转进程时,转换某种对象Core Data不会直接处理NSData
。变形金刚不会影响对象的内存属性值。
简而言之,