CoreData保存自定义对象

2021-12-24  本文已影响0人  回不去的是故乡

目前app本地持久化使用的是CoreData,编码的过程中遇到了自定义对象保存问题

以下是操作步骤 都是基于Xcode 自动创建NSManagedObject

class YYTimAuthValueTransformer: ValueTransformer {
    public override class func transformedValueClass() -> AnyClass {
        return YYTimAuth.self
    }
    public override class func allowsReverseTransformation() -> Bool {
        return true
    }
    public override func transformedValue(_ value: Any?) -> Any? {
        guard value != nil else { return nil }
        do {
            return try NSKeyedArchiver.archivedData(withRootObject:value!,requiringSecureCoding:false)
        } catch let error {
            FKLog.c("错误信息:\(error)")
            return nil
        }
    }
    public override func reverseTransformedValue(_ value: Any?) -> Any? {
        guard let data = value as? Data else {
            return nil
        }
        do {
           return try NSKeyedUnarchiver.unarchivedObject(ofClass: YYTimAuth.self, from: data)
        } catch let error {
            FKLog.c("错误信息:\(error)")
            return nil
        }
    }
}
/// 腾讯im 鉴权相关
struct YYTimKey {
    static let sign = "tim_sign"
    static let userId = "user_id"
}

/// 腾讯im 鉴权相关
public class YYTimAuth:NSObject, NSCoding,YYJson {
    
    var timSign: String?
    var userId: String?
    
    public func encode(with coder: NSCoder) {
        coder.encode(timSign, forKey: YYTimKey.sign)
        coder.encode(userId, forKey: YYTimKey.userId)
    }
    
    public required init?(coder: NSCoder) {
        self.timSign = coder.decodeObject(forKey: YYTimKey.sign) as? String
        self.userId = coder.decodeObject(forKey: YYTimKey.userId) as? String
    }
}

上一篇 下一篇

猜你喜欢

热点阅读