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

SwiftData崩溃报错:尝试插入nil对象,移除züge属性则正常

问题分析与解决

你的代码在调用.modelContainer(for: Match.self)时崩溃,报错Thread 1: "*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[7]",移除züge属性后崩溃消失,核心原因是SwiftData无法正确识别未标记为模型的自定义类型集合,即便Zug遵循了Codable也没用——Codable只负责数据编解码,和SwiftData的模型管理是两套独立机制。

解决步骤

1. 给Zug类添加@Model标记

必须让Zug成为SwiftData的模型类,这样SwiftData才能正确管理它和Match的关联:

import Foundation
import SwiftData

@Model
final class Zug: Codable {
    // 这里是你的Zug类属性、CodingKeys定义和Codable实现
}

2. 可选:显式配置关联关系(优化)

如果Zug是Match的从属对象,可以用@Relationship标记来定义删除规则(比如删除Match时自动删除关联的Zug):

@Model
final class Match {
    var bool: Bool
    var timestamp: Date
    var won: Bool
    var against: String
    @Relationship(deleteRule: .cascade)
    var züge: [Zug]
    
    init(bool: Bool, timestamp: Date, won: Bool, against: String, züge: [Zug]) {
        self.bool = bool
        self.timestamp = timestamp
        self.won = won
        self.against = against
        self.züge = züge
    }
}

3. 清理缓存避免旧模型干扰

修改模型后,建议删除App的沙盒数据:

  • 模拟器:通过「Erase All Content and Settings」清空
  • 真机:卸载App后重装

崩溃原因详解

SwiftData初始化模型容器时,会扫描所有模型的属性类型。如果属性是自定义类型的集合,而该类型没有@Model标记,SwiftData无法完成类型映射,内部处理时会生成nil值,最终触发数组初始化失败的崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:12:14