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



由于我将项目更改为使用"objectWillChange.send((",因此我没有收到任何错误。因为我需要手动更新视图,因为它不会为自定义旋转木马视图更新自己(因为核心数据?(。

如果我写";1〃;然后点击下一个按钮(NavigationLink(

控制台日志
page.name:1
捕获错误:nilError

这是代码。

AddPage类

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()
}
}
}

AddPageView

@ObservedObject var add = AddPage()  
NavigationLink(destination: ContentView()){
Text("Next")
.background(
Rectangle()
.frame(width: 330, height: 60, alignment: .center)
)
.onTapGesture {
add.addPage(item: pageName)
}
}

场景电报类

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中不一致,它们应该仅在SwiftUIView中使用。

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

注释掉SceneDelegate和中的堆栈代码

制作可变

let context = PersistentController.shared.container.viewContext

因此,您可以将context保留在View

最新更新