美文网首页
CoreData保存自定义对象

CoreData保存自定义对象

作者: 回不去的是故乡 | 来源:发表于2021-12-24 20:02 被阅读0次

目前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
    }
}

  • 以上都设置完后,你就可以直接使用自定义的对象了

相关文章

  • CoreData保存自定义对象

    目前app本地持久化使用的是CoreData,编码的过程中遇到了自定义对象保存问题 以下是操作步骤 都是基于Xco...

  • 归档 存储数据

    归档一般都是保存自定义对象的时候,使用归档.因为plist文件不能够保存自定义对象. 如果一个字段当中保存有自定义...

  • 归档 存储数据

    归档一般都是保存自定义对象的时候,使用归档.因为plist文件不能够保存自定义对象.如果一个字段当中保存有自定义对...

  • CoreData 简要总结(一)创建长下文

    CoreData简介 Core Data提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在S...

  • CoreData笔记

    CoreData提供了对象-关系映射(ORM)的功能,能够将OC对象转化成数据,保存在SQLit在e数据库文...

  • iOS持久化存储

    iOS有以下几种数据持久化方式 NSUserDefault (无法保存自定义对象) plist表 (无法保存自定义...

  • 2017/4/13 周四--打印通告函

    自定义对象用于保存通知函填写信息 实现编辑页面Controller实现获取页面保存Json,及新建对象保存。 Su...

  • 数据库----CoreData框架的创建以及涉及的谓词知识点总结

    CoreData概念. 是一种提供对象关系映射的功能,将OC对象转换成数据,保存在SQLite数据库文件中数据持久...

  • 数据库操作语句

    CoreData CoreData的使用步骤 数据持久化:是将一个数据保存到文件中,而不是内存中 CoreData...

  • iOS开发 - 关于 CoreData 的使用

    简介: CoreData 是数据持久化存储的最佳方式. CoreData 是基于 sqlite 的封装, 数据保存...

网友评论

      本文标题:CoreData保存自定义对象

      本文链接:https://www.haomeiwen.com/subject/blhrqrtx.html