问题复现
在学习Swift@Relationship属性包装器的过程中,发现每次点击新增或删除按钮并触发addSample()和deleteSample()时都会报错,并且强退出应用。
代码如下:
func addSample() {
// 创建新的 User 和 Job
let user1 = User(name: "Piper Chapman", city: "New York", joinDate: .now)
let job1 = Job(name: "Organize sock drawer", priority: 3)
let job2 = Job(name: "Make plans with Alex", priority: 4)
modelContext.insert(user1)
user1.jobs.append(job1)
user1.jobs.append(job2)
}
func deleteSample() {
do {
let users = try modelContext.fetch(FetchDescriptor<User>())
for user in users {
if user.name == "Piper Chapman" {
modelContext.delete(user)
}
}
} catch {
print("报错了")
}
}
这段代码之前是正常运行的,在写《SwiftData框架属性包装器@Relationship》一文时,写着写着就突然报错并且没有输出具体的报错代码。
此外,数据是可以正常插入到模拟器的数据库中,插入后直接卡死并报错。
这一问题在Xcode预览中没有复现,数据是正常插入和删除的。
后来排查判断可能是调试断点导致假性错误,调试断点有时会导致应用暂停,显示类似 0x102e9490c 的错误信息。这可能并非真正的崩溃,而是断点触发。
解决方案
在 Xcode 左侧的 断点导航器 中:
按下 Command + 8 打开断点导航器。
右键点击断点导航器中的所有断点,选择 Delete Breakpoint。
从这里可以看到Job.swift存在断点,可能是之前意外添加上去的,右击断点处点击删除。
删除断点后重新运行,问题得到解决。