SwiftUI Mac OS因没有EnvironmentObject的popover而崩溃
在我看来,我使用的是一个PopOver。在这个视图中,我正在对CoreData执行一个FetchRequest。它工作得很好。它连接到我的SwiftUI Mac OS因没有EnvironmentObject的popover而崩溃,swift,macos,core-data,swiftui,Swift,Macos,Core Data,Swiftui,在我看来,我使用的是一个PopOver。在这个视图中,我正在对CoreData执行一个FetchRequest。它工作得很好。它连接到我的环境(\.managedObjectContext)。然而,每当我调用我的popover并重新加载该视图时,它总是崩溃 我在另一个堆栈溢出问题中读到,我必须手动将我的对象推送到那个popover。我正在尝试,但它仍然崩溃。我用这个来称呼我的popover: Button(action: { //Call the PopOver self.s_showP
环境(\.managedObjectContext)
。然而,每当我调用我的popover并重新加载该视图时,它总是崩溃
我在另一个堆栈溢出问题中读到,我必须手动将我的对象推送到那个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)
所以,我终于找到了解决办法。感谢@Asperi的帮助 我在实际视图之前使用了NavigationView。看起来SwiftUI没有将我的
环境对象
推送到详细视图
。虽然不确定它是否是一个bug,但是在NavigationLink
和PopOver
手动推送它修复了它
也许这对其他人有帮助,当他们在同一个问题上挣扎时
我刚刚将我的NavigationLink
更改为以下代码:
NavigationLink(destination: VenueView().environment(\.managedObjectContext, NSManagedObjectContext.current), tag: 4, selection: self.$userData.currentView) {
在那里,我手动添加了环境
,它可以正常工作
我的popover代码如下所示:
.popover(isPresented: self.$s_showPopover, content: { PersonFormPopover().environment(\.managedObjectContext, self.managedObjectContext).environmentObject(self.userData)
我按照Asperi的建议为我的managedObjectContext使用了一个本地变量。您是否可以显示
PersonFormPopover
code?@Asperi这只是我为测试创建的一个空视图。@Asperi在上面添加了它。当我在popover之后再次获取时,我发现我的FetchRequest是空的。在我使您的代码快照集成并可编译之后,它就可以工作了好。使用Xcode 11.2/macOS 10.15.0进行测试。我想原因是在别的地方。