【发布时间】:2021-07-24 12:48:40
【问题描述】:
由于我将项目更改为使用“objectWillChange.send()”,因此出现 nil 错误。 因为我需要手动更新视图,因为它不会为自定义轮播视图更新自身(因为核心数据?)。
如果我写“1”并点击下一步按钮(NavigationLink)
控制台日志
页面名称:1
捕获错误:nilError
这里是代码。
添加页面类
class AddPage: ObservableObject {
@Environment(\.presentationMode) var presentation
@Environment(\.managedObjectContext) var moc
func addPage(item: String) {
if item != "" {
let page = Page(context: self.moc)
page.name = item
do {
print("page.name: \(page.name ?? "Unknown")")
try self.moc.save()
} catch {
print("catch: \(error)")
}
objectWillChange.send()
presentation.wrappedValue.dismiss()
}
}
}
添加页面视图
@ObservedObject var add = AddPage()
NavigationLink(destination: ContentView()){
Text("Next")
.background(
Rectangle()
.frame(width: 330, height: 60, alignment: .center)
)
.onTapGesture {
add.addPage(item: pageName)
}
}
SceneDelegate 类
added only
var addpage = AddPage()
let contentView = ContentView()
.environment(\.managedObjectContext, context)
.environmentObject(addpage)
谁能帮帮我..?
【问题讨论】:
-
您在执行
. environment(\.managedObjectContext, context)之前创建了 AddPage 对象,不确定这是否有效。我不会在 AddPage 中使用@Environment(\.managedObjectContext),而是将上下文作为参数注入 init 方法 -
@JoakimDanielson 感谢您的回复!我无法尝试您的方式,因为我不知道如何将“@Environment(\.managedObjectContext)”注入 init 方法。但我可以将值保存在 page.name 中,这意味着它可以与“@Env”一起使用...”?
-
我的意思是在这里避免@Environment,你应该注入的是
context对象 -
@JoakimDanielson 再次感谢您的回复!我会尝试的。
标签: swift core-data swiftui environment-variables observable