【发布时间】:2020-06-21 19:32:32
【问题描述】:
我有一个基于列表的应用程序。为了支持将新元素添加到列表中,我所做的是在动作处理程序中创建一个新对象,并将其传递给详细信息视图。如果用户取消详细信息视图,我想删除该对象 - 当我这样做时,我得到一个 EXC_BAD_INSTRUCTION。
一定有一些线程问题正在发生。
如果我在创建笔记后立即删除它(作为测试),它可以工作:
Button(action: {
self.newNote = NoteDataManager.makeNote(moc: self.moc, folder: self.savingFolder)
// DELETE immediately, as a test
self.moc.delete(self.newNote!)
self.showNewNoteView = true
}) {
Image(systemName: "square.and.pencil")
}
.sheet(isPresented: self.$showNewNoteView) {
CreateNoteView(newNote: self.newNote!, cancelAction: {
// DO NOTHING here (for now)
})
}
但是,如果我在 cancelAction 的处理程序中删除它(当用户点击取消按钮时调用它),我会得到异常:
Button(action: {
self.newNote = NoteDataManager.makeNote(moc: self.moc, folder: self.savingFolder)
self.showNewNoteView = true
}) {
Image(systemName: "square.and.pencil")
}
.sheet(isPresented: self.$showNewNoteView) {
CreateNoteView(newNote: self.newNote!, cancelAction: {
// MOVING the delete action here causes EXC_BAD_INSTRUCTION
self.moc.delete(self.newNote!)
})
}
我的猜测是这是某种线程问题之类的。有没有人遇到过这个问题并知道如何解决这个问题?看来应该可以了……
【问题讨论】:
-
尝试将该行分成两行。第一个是
let n = self.newNote!,第二个是self.moc.delete(n)。我想知道是!导致它崩溃(即newNote为零)。 -
不是——我试过了,谢谢你的建议!我还浏览了调试器,动作处理程序成功了。崩溃发生在 SwiftUI 框架代码中。