为啥我在保存 managedObjectContext 时得到 nilError? [复制]

Posted

技术标签:

【中文标题】为啥我在保存 managedObjectContext 时得到 nilError? [复制]【英文标题】:why I got nilError while saving managedObjectContext? [duplicate]为什么我在保存 managedObjectContext 时得到 nilError? [复制] 【发布时间】:2020-07-27 11:19:44 【问题描述】:

我有一些传递信息的视图。 最后我想保存数据,但我得到“nilError”。

我怎样才能让床单从右到左淡入?

我是新手,但希望有人能提供帮助。

型号:

import Foundation
import CoreData

public class Test: NSManagedObject, Identifiable 
    @NSManaged public var name: String?
    @NSManaged public var message: String?

.xcdatamodel: 属性:“name”和“message”,String和“Class.name”:test,“Module”:当前产品模块,“Codegen”:Manual/None (对不起,我不允许上传图片)

观看次数:

import SwiftUI

struct ThirdView: View 
    @Environment(\.managedObjectContext) var managedObjectContext
    @Environment(\.presentationMode) var presentationMode
    
    @State private var showingSheet = false
    
    let name: String
    let message: String
    
    var body: some View 
        List
            Text(name + ": " + message)
            Button("Dismiss")
                self.saveThis()
                self.presentationMode.wrappedValue.dismiss()
            
        
    
    
    func saveThis()
        let newEntry = Test(context: self.managedObjectContext)
        
        newEntry.message = self.message
        newEntry.name = self.name
    
        do 
            try self.managedObjectContext.save()
         catch 
            print(error)
        
    


struct SecondView: View 
    @Environment(\.presentationMode) var presentationMode
    @State private var showingSheet = false
    
    let name: String?
    @State private var message: String = ""
    
    var body: some View
        List
            TextField("Message: ", text: $message)
            
            Button("Next")
                self.showingSheet.toggle()
            .sheet(isPresented: $showingSheet)
                ThirdView(name: self.name!, message: self.message)
            
        
    


struct NewEntry: View 
    @State private var showingSheet = false
    
    var body: some View 
        Button("Show Sheet")
            self.showingSheet.toggle()
        
        .sheet(isPresented: $showingSheet)
            SecondView(name: "Fritz")
        
    

...我的 xcdatamodel 和其他一些模型类中有另一个实体来保存其他信息,我没有问题。 这可能很愚蠢,但有可能我只能拥有这些托管对象之一吗?

【问题讨论】:

【参考方案1】:

.sheet 修饰符引入了新的视图层次结构,因此您必须设置任何所需的环境值才能在工作表中显式查看(在本例中为上下文),例如

.sheet(isPresented: $showingSheet)
    ThirdView(name: self.name!, message: self.message)
       .environment(\.managedObjectContext, managedObjectContext)

然后在

中声明它
struct SecondView: View 
    @Environment(\.managedObjectContext) var managedObjectContext
    @Environment(\.presentationMode) var presentationMode
...

【讨论】:

好的,听起来不错,但现在它在 func saveThis 中显示“ThirdView 类型的值没有成员 'managedObjectContext'”如何解决? 您的 SecondView 也显示在工作表中,因此也应该这样做。 我忘了在“NewEntry”中声明环境变量,非常感谢!

以上是关于为啥我在保存 managedObjectContext 时得到 nilError? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 SwiftUI 中重新打开应用程序时没有保存 CoreData?

为啥 ISession 保存不插入?

保存数据时出现问题,将 CoreData 与 SwiftUI 一起使用

为啥我在 Dev-C++ 中看不到项目文件?

为啥 NSCoding 无法在正确保存后解码对象?

我在Delphi 7 中,使用TMS第三方的控件包,为啥保存后再打开就出错?