gpt4 book ai didi

Swift:使用 self.moc.save() 保存核心数据时出现 Nil 错误

转载 作者:行者123 更新时间:2023-12-02 02:14:45 25 4
gpt4 key购买 nike

自从我将项目更改为使用“objectWillChange.send()”后,我得到了 nil 错误。因为我需要手动更新 View ,因为它不会针对自定义轮播 View 自行更新(因为核心数据?)。

如果我写“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()
}
}
}

添加页面 View

@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) var moc 

对于类似(如果您正在使用 Xcode 生成的示例代码)如果不是手动获取您的 moc 但是您设置它

var moc = PersistentController.shared.container.viewContext

@Environment 包装器在 class 中不一致,它们只能在 SwiftUI View 中使用。

如果您没有 PersistentController,请从具有 SwiftUI 生命周期和 CoreData 的全新项目中获取代码。小心并保留原始堆栈中的名称,通常是应用程序名称

注释掉(不要删除,直到你确定这有效)来自SceneDelegate

的堆栈代码

创建一个变量

let context = PersistentController.shared.container.viewContext

所以你可以在你的View中保留context

关于Swift:使用 self.moc.save() 保存核心数据时出现 Nil 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67346375/

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