我在我的视图中使用了PopOver。在这个视图中,我正在对CoreData执行FetchRequest。它工作得很好。它已连接到我的Environment(\.managedObjectContext)
。然而,当我调用popover并重新加载该视图时,它总是崩溃。
我在另一个堆栈溢出问题中读到,我必须手动将我的对象推送到那个弹出窗口。我正在尝试它,但它仍然崩溃。我用这个来调用我的popover:
Button(action:
{
//Call the PopOver
self.s_showPopover = true
})
{
Image("Link")
}
.padding(.trailing, 16)
.buttonStyle(PlainButtonStyle())
.popover(isPresented: self.$s_showPopover, content: { PersonFormPopover().environment(\.managedObjectContext, NSManagedObjectContext.current).environmentObject(userData) })
我发送的对象是否正确?仅当我单击弹出按钮至少一次时,才会出现崩溃。如果我不点击它,它就不会崩溃。
在我的PopOver视图中,我甚至没有使用该对象,也没有向CoreData发出任何请求。为什么它还在崩溃?当我重新加载该视图时,它在解析FetchRequest
时显示了我的foreach
中的错误。看起来他根本就没有得到任何物体。
这是我的PersonPopOver视图,它只是一个空视图。
struct PersonFormPopover: View {
var body: some View {
Text(/"Hello, World!")
}
}
struct PersonFormPopover_Previews: PreviewProvider {
static var previews: some View {
PersonFormPopover()
}
}
在弹出窗口后再次加载视图时,我收到以下崩溃消息。
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
发布于 2020-03-08 15:59:48
所以,我终于找到了一个解决方案。感谢@Asperi的帮助...
我在实际视图之前使用了NavigationView。看起来SwiftUI并没有把我的Environment Object
推送到DetailView
上。虽然不确定它是否是一个bug,但是在NavigationLink
和PopOver
手动推送它修复了它。
也许这对其他人也有帮助,当你遇到同样的问题时。
我刚刚将我的NavigationLink
更改为以下代码:
NavigationLink(destination: VenueView().environment(\.managedObjectContext, NSManagedObjectContext.current), tag: 4, selection: self.$userData.currentView) {
在这里,我手动添加了environment
,它起作用了。
我的弹出窗口代码如下所示:
.popover(isPresented: self.$s_showPopover, content: { PersonFormPopover().environment(\.managedObjectContext, self.managedObjectContext).environmentObject(self.userData)
按照Asperi的建议,我在managedObjectContext中使用了本地变量。
https://stackoverflow.com/questions/60587840
复制相似问题