Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SwiftUI Mac OS因没有EnvironmentObject的popover而崩溃_Swift_Macos_Core Data_Swiftui - Fatal编程技术网

SwiftUI Mac OS因没有EnvironmentObject的popover而崩溃

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

在我看来,我使用的是一个PopOver。在这个视图中,我正在对CoreData执行一个FetchRequest。它工作得很好。它连接到我的
环境(\.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进行测试。我想原因是在别的地方。