winddpan / CodableWrapper

@CodingKey("encoder", "decoder") var cool: Bool = true
MIT License
362 stars 30 forks source link

与 wcdb.swift 一起使用,@Codec 与 wcdb的 tablecodable 中 coding定义 导致崩溃 #6

Closed yonfong closed 2 years ago

yonfong commented 3 years ago

`struct ExaminationItem: Codable { static let tableName = "ExamTable"

var id: String
var type: String
var typename: String
var fathertype: String
var fathertypename: String
var searchwd: String?
var biaozhu: String?

var timu: [ExamOptionItem] = []
var xuanxiang: [ExamOptionItem] = []
var jiexi: [ExamOptionItem] = []
var daan: [String] = []

@Codec var showAnalyze: Bool = false
@Codec var isshoucang: Bool = false
@Codec var timuleibie: Bool = false

var noXunxiang: Bool {
    get {
        return daan.count <= 0
    }
}

var isRadio: Bool {
    get {
        return daan.count <= 1
    }
}

} extension ExaminationItem: TableCodable { enum CodingKeys: String, CodingTableKey { typealias Root = ExaminationItem static let objectRelationalMapping = TableBinding(CodingKeys.self) case id case type case typename case fathertype case fathertypename case searchwd case biaozhu case timu case xuanxiang case jiexi case daan case isshoucang case timuleibie } }`

截屏2021-11-14 下午2 18 01

请教下 需要怎么解决

Scyano commented 3 years ago

主线程调用栈栈顶是 Dictionary.vatiant.subscript.getter 吗

Scyano commented 3 years ago

WCDB 内使用 KeyedDecodingTableContainer<CodingKeys: CodingKey>, 与原生 KeyedDecodingContainer 内存布局不同, 导致获取 _container 时 crash, 确实是个隐患. 感谢反馈, 会尽快解决的

yonfong commented 3 years ago

KeyedDecodingContainer

WCDB 内使用 KeyedDecodingTableContainer<CodingKeys: CodingKey>, 与原生 KeyedDecodingContainer 内存布局不同, 导致获取 _container 时 crash, 确实是个隐患. 感谢反馈, 会尽快解决的

需要提供crash的demo吗,刚建了个空白的demo模拟,这个非常容易复现现象

yonfong commented 2 years ago

WCDB 内使用 KeyedDecodingTableContainer<CodingKeys: CodingKey>, 与原生 KeyedDecodingContainer 内存布局不同, 导致获取 _container 时 crash, 确实是个隐患. 感谢反馈, 会尽快解决的

请问下 这个问题是不是还没解决?

winddpan commented 2 years ago

WCDB 内使用 KeyedDecodingTableContainer<CodingKeys: CodingKey>, 与原生 KeyedDecodingContainer 内存布局不同, 导致获取 _container 时 crash, 确实是个隐患. 感谢反馈, 会尽快解决的

请问下 这个问题是不是还没解决?

没有解决,WCDB很难兼容,短期不再处理

yonfong commented 1 year ago

@winddpan 您好,项目重度依赖 CodableWrapper 和 WCDBSwift,麻烦您再研究下这个问题看看是否能解决吗?谢谢!

mancongiOS commented 2 months ago

WCBD内部重写了Codable相关的协议,CodableWrapper内部也重写了导致了调用冲突, 这代表着只要有相关实现的三方库都会产生这样的问题。 这个问题在现有的逻辑下没法解决。 要想彻底解决,就只能完整的重写JSONDecoder和JSONEncoder这两个解析器,而不是重写Codable相关的协议方法。