You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问未保存到Realm数据库的临时属性?

解决Core Data实体临时属性的解码与持久化问题

看起来你是在处理Core Data实体的解码逻辑,同时想要保留isAccessible作为本地临时属性——不需要从JSON解码,也不用存入数据库对吧?咱们来调整代码解决这个问题:

核心问题分析

你现在把isAccessible放进了CodingKeys枚举里,这会导致两个不必要的问题:

  • 解码时会强制尝试从JSON中读取这个字段,如果API返回的JSON里没有isAccessible,解码流程会直接抛出错误;
  • 虽然你没给isAccessible加@objc dynamic修饰符,Core Data不会把它持久化,但把它放在CodingKeys里完全没必要,反而会增加解码的风险。

修正后的代码

class Item: Object, Decodable { 
    @objc dynamic var eid: Int = 0 
    // 临时属性:无需解码、无需持久化,保持当前定义即可
    var isAccessible: Bool = false 

    // 只包含需要从JSON解码的持久化属性
    private enum CodingKeys : String, CodingKey { 
        case eid
        // 移除isAccessible,不让它参与解码流程
    } 

    required convenience init(from decoder: Decoder) throws { 
        self.init() 
        let container = try decoder.container(keyedBy: CodingKeys.self) 
        self.eid = try container.decode(Int.self, forKey: .eid)
        // 不需要处理isAccessible,它的默认值就是false,后续可以在本地逻辑里自由修改
    }
}

关键说明

  • 移除CodingKeys中的isAccessible:这样解码时只会处理eid字段,即使JSON里没有isAccessible也不会触发解码错误;
  • 临时属性的定义:isAccessible没有@objc dynamic修饰,Core Data会自动忽略这个属性,不会把它存入数据库,完全符合你“临时值”的需求;
  • 本地修改临时属性:你可以在任何业务逻辑中直接修改isAccessible的值,比如item.isAccessible = true,这个变化只会存在于内存中,不会被持久化到Core Data。

内容的提问来源于stack exchange,提问作者mikro098

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:44:49