Swift: 使用 self.moc.save() 保存核心数据时无错误
Swift: Nil Error when using self.moc.save() to save in core data
自从我将项目更改为使用 'objectWillChange.send()' 后,我得到了零错误。
因为我需要手动更新视图,因为它不会针对自定义轮播视图自行更新(因为核心数据?)。
如果我写“1”并点击下一步按钮(NavigationLink)
控制台日志
page.name: 1
捕获错误:nilError
这是代码。
添加页面Class
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)
}
}
SceneDelegate Class
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
因此您可以将 context
保留在 View
中
自从我将项目更改为使用 'objectWillChange.send()' 后,我得到了零错误。 因为我需要手动更新视图,因为它不会针对自定义轮播视图自行更新(因为核心数据?)。
如果我写“1”并点击下一步按钮(NavigationLink)
控制台日志
page.name: 1
捕获错误:nilError
这是代码。
添加页面Class
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)
}
}
SceneDelegate Class
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
因此您可以将 context
保留在 View