首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >没有EnvironmentObject的popover导致SwiftUI Mac OS崩溃

没有EnvironmentObject的popover导致SwiftUI Mac OS崩溃
EN

Stack Overflow用户
提问于 2020-03-08 21:16:52
回答 1查看 261关注 0票数 1

我在我的视图中使用了PopOver。在这个视图中,我正在对CoreData执行FetchRequest。它工作得很好。它已连接到我的Environment(\.managedObjectContext)。然而,当我调用popover并重新加载该视图时,它总是崩溃。

我在另一个堆栈溢出问题中读到,我必须手动将我的对象推送到那个弹出窗口。我正在尝试它,但它仍然崩溃。我用这个来调用我的popover:

代码语言:javascript
代码运行次数:0
运行
复制
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视图,它只是一个空视图。

代码语言:javascript
代码运行次数:0
运行
复制
struct PersonFormPopover: View {    
    var body: some View {
        Text(/"Hello, World!")
    }
}

struct PersonFormPopover_Previews: PreviewProvider {
    static var previews: some View {
        PersonFormPopover()
    }
}

在弹出窗口后再次加载视图时,我收到以下崩溃消息。

代码语言:javascript
代码运行次数:0
运行
复制
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-08 23:59:48

所以,我终于找到了一个解决方案。感谢@Asperi的帮助...

我在实际视图之前使用了NavigationView。看起来SwiftUI并没有把我的Environment Object推送到DetailView上。虽然不确定它是否是一个bug,但是在NavigationLinkPopOver手动推送它修复了它。

也许这对其他人也有帮助,当你遇到同样的问题时。

我刚刚将我的NavigationLink更改为以下代码:

代码语言:javascript
代码运行次数:0
运行
复制
 NavigationLink(destination: VenueView().environment(\.managedObjectContext, NSManagedObjectContext.current), tag: 4, selection: self.$userData.currentView) {

在这里,我手动添加了environment,它起作用了。

我的弹出窗口代码如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
.popover(isPresented: self.$s_showPopover, content: { PersonFormPopover().environment(\.managedObjectContext, self.managedObjectContext).environmentObject(self.userData)

按照Asperi的建议,我在managedObjectContext中使用了本地变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60587840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档