gpt4 book ai didi

core-data - 从 SwiftUI 中保存核心数据失败

转载 作者:行者123 更新时间:2023-12-03 06:53:08 27 4
gpt4 key购买 nike

我正在开发一个将 Core Data 与 SwiftUI 相结合的应用程序。一切都很顺利,直到我将更新代码放入工作表中,之后我得到了 0 的“Foundation._GenericObjCError”错误,我相信这意味着没有错误,但我的持久容器仍然没有更新。

此组合是已知问题吗?

我用来向我的商店条目添加条目的代码:

struct StoreAdd: View {
@Environment(\.managedObjectContext)
var managedObjectContext

@State
var name = ""
@State
var branch = ""

var body: some View {
VStack {
TextField("Store name", text: $name)
TextField("Store branch", text: $branch)
Button(
action: {
let store = Store(context: self.managedObjectContext)
store.id = UUID()
store.name = self.name
store.branch = self.branch.isEmpty ? nil : self.branch
self.managedObjectContext.persist()
},
label: { Text("Add")}
)
.disabled(name.isEmpty)
}
.padding(.horizontal, 20)
}
}

persist()save() 的包装器。

最佳答案

我也遇到了这个问题。我错误地认为 @Environment 变量位于某种全局存储中,或者至少是每个 SceneDelegate 唯一的存储中。

然而,环境似乎是分层的,自动传递到其后代,并且不会传递到模态。我猜测在您的情况下,您使用了类似 .sheet 的内容来打开 StoreAdd View 。这实际上导致 StoreAdd 获得一个完全空的环境。我发现我可以通过执行以下操作来解决此错误:

.sheet(isPresented: $showAddSheet, content: { StoreAdd().environment(\.managedObjectContext, self.managedObjectContext) } )

我不知道这是一个错误还是设计使然。它确实允许一些有趣的想法,例如传递临时子上下文进行编辑。

关于core-data - 从 SwiftUI 中保存核心数据失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58186929/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com