SwiftData插入模型崩溃:expected attribute to be Codable问题求助
SwiftData插入模型崩溃:
expected attribute to be Codable 解决方案 以下是针对该崩溃问题的排查和解决方向:
检查嵌套结构体的属性修饰符
确保MoneySplitter等嵌套结构体属性没有添加@Attribute(.externalStorage)修饰符。Xcode 15 Beta版本中,该修饰符与Codable嵌套类型存在兼容性问题,移除后可尝试重新运行。验证模型类的Codable实现逻辑
SwiftData模型类(继承自Model)的Codable实现需要正确处理父类的初始化和编码逻辑:- 优先使用自动合成Codable(确保所有属性都支持自动合成)
- 若手动实现Codable,必须在
init(from:)和encode(to:)中调用父类的对应方法,且仅处理业务属性,示例代码如下:class RentSplitDataModel: Model, Codable { var splitter: MoneySplitter // 其他业务属性 enum CodingKeys: String, CodingKey { case splitter // 对应其他业务属性的key } required init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) splitter = try container.decode(MoneySplitter.self, forKey: .splitter) // 初始化其他业务属性 try super.init(from: decoder) } func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(splitter, forKey: .splitter) // 编码其他业务属性 try super.encode(to: encoder) } }
处理Beta版本的已知bug
当前使用的Xcode 15 Beta 4和iOS 17 Beta 3存在SwiftData的部分兼容性问题,可尝试:- 清理项目缓存(
Command+Shift+K)后重新构建 - 删除设备上的App,重新安装运行
- 升级到最新可用的Xcode/iOS Beta版本
- 清理项目缓存(
简化模型定位问题
创建一个仅包含核心嵌套结构体属性的简化版RentSplitDataModel,测试插入操作是否正常。若正常,再逐步添加其他属性,定位到触发崩溃的具体属性。
内容的提问来源于stack exchange,提问作者Ky -
相关产品推荐
相关产品推荐

