设置 Codable 属性的可选字符串时 SwiftData 崩溃

问题描述 投票:0回答:1

我遇到了一个问题,即使用可选字符串将 SwiftData 对象上的属性设置为

Codable
结构会导致应用程序崩溃。

例如,如果我有以下模型对象和结构:

@Model
final class Item {
    var timestamp: Date
    var codableProp: CodedValue?
    
    init(timestamp: Date, cProp: CodedValue?) {
        self.timestamp = timestamp
            self.codableProp = cProp
    }
}

struct CodedValue: Codable{
    var string0: String? = nil
    var bool0: Bool? = nil
    var bool1: Bool? = nil
}

如果我使用以下 JSON 创建

CodedValue
的实例,应用程序会崩溃:

{
    "bool0": true
}

我收到的具体错误是:

“无法将‘Swift.Optional’(0x1c1e3f000)类型的值转换为‘Swift.String’(0x1c1e37e30)”

崩溃似乎发生在

@Model
宏中的某个地方:

ios swift codable swift-data
1个回答
0
投票

我在这里找到了解决方案: 快速数据崩溃解决方案

@Model
装饰器添加到所有模型中。并且不要在
CodedValue
构造函数中分配
Item
模型。因为您的应用程序可能会崩溃。这只是一个 SwiftData 错误。

let codedValue = CodedValue(string0: "", bool0: false, bool1: false)
let item = Item(timestamp: Date.now)
item.codableProp = codedValue
© www.soinside.com 2019 - 2024. All rights reserved.