CoreData保存自定义对象

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

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

  • 定义对象 NSManagedObject 对象


    对象定义

    设置transformable
  • 其中timAuth字段是指向自定义对象的,type选择Transformable
  • 选择timAuth字段,打开右侧更多编辑按钮,你会看到Transformer和Custom Class 让你填写
  • Transformer 是你让填写转换的辅助类 以下是我工程中的代码,主要是继承ValueTransformer 然后实现以下四个方法。在图二中看看到Transformer填的是YYTimAuthValueTransformer
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
        }
    }
}
  • 然后是要保持的自定义对象, 该类需要是继承NSObject,且实现了NSCoding协议
    图二中Custom Class 我填的是 YYTimAuth
/// 腾讯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
    }
}

  • 以上都设置完后,你就可以直接使用自定义的对象了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容