Core data 关闭应用程序失败后将自定义类保存到CoreData SwiftUI中的数组

Core data 关闭应用程序失败后将自定义类保存到CoreData SwiftUI中的数组,core-data,swiftui,xcode11,Core Data,Swiftui,Xcode11,当我关闭我的应用程序,然后在重新加载应用程序时尝试将其保存到核心时,出现以下错误 错误:严重的应用程序错误。在核心数据更改处理期间捕获异常。这通常是NSManagedObjectContextObjectsIDChangeNotification的观察者中的错误-[\uu\NSSingleObjectArrayI compare:]:发送到实例0x600002291510的无法识别的选择器带有userInfo(null) 当我从模拟器上删除应用程序后,第一次运行应用程序fresh时,它工作正常,

当我关闭我的应用程序,然后在重新加载应用程序时尝试将其保存到核心时,出现以下错误

错误:严重的应用程序错误。在核心数据更改处理期间捕获异常。这通常是NSManagedObjectContextObjectsIDChangeNotification的观察者中的错误-[\uu\NSSingleObjectArrayI compare:]:发送到实例0x600002291510的无法识别的选择器带有userInfo(null)

当我从模拟器上删除应用程序后,第一次运行应用程序fresh时,它工作正常,但一旦我关闭程序并尝试再次添加到核心,我就会出现上面的错误

这是我的密码:

import SwiftUI
import CoreData

struct ContentView: View {
    @Environment(\.managedObjectContext) var managedObjectContext
    @State var objRating:[ObjectToRate]

    @FetchRequest(entity: ObjectsForRate.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \ObjectsForRate.objectsClass, ascending: true)])
    var classesRetrieved: FetchedResults<ObjectsForRate>


    var body: some View {
        VStack {
            Text(self.objRating[0].name!)
            Button(action: {


                    print("Mark 1")
                let obj =  ObjectsForRate(context: self.managedObjectContext)
                obj.objectsClass = self.objRating



                do
                {
                    try self.managedObjectContext.save()
                }
                catch
                {
                    print("ERROR \(error)")
                }


            }) {
                Text("Insert to Core ")
            }
            Button(action: {
                print("---------")
                print(self.classesRetrieved.count)
                print(self.classesRetrieved)

            }) {
                Text("Retrieve")
            }
        }

    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView(objRating:data )
    }
}



public class ObjectToRate:NSObject, NSCoding
{
    public var name:String?


    init(name:String) {
        self.name = name

    }

    public func encode(with coder: NSCoder) {
        coder.encode(name,forKey: "name")

    }

    public required init(coder decoder: NSCoder) {
        self.name = decoder.decodeObject(forKey: "name") as? String

    }



}

var obj: ObjectToRate = {
    let o = ObjectToRate(name: "hi")
    return o
}()

var data = [
    obj
]
导入快捷界面
导入CoreData
结构ContentView:View{
@环境(\.managedObjectContext)变量managedObjectContext
@状态变量objRating:[ObjectToRate]
@FetchRequest(实体:ObjectsForRate.entity(),SortDescriptor:[NSSortDescriptor(键路径:\ObjectsForRate.objectsClass,升序:true)])
var classesRetrieved:FetchedResults
var body:一些观点{
VStack{
文本(self.objRating[0].name!)
按钮(操作:{
打印(“标记1”)
让obj=ObjectsForRate(上下文:self.managedObjectContext)
obj.objectsClass=self.objRating
做
{
请尝试self.managedObjectContext.save()
}
抓住
{
打印(“错误\(错误)”)
}
}) {
文本(“插入核心”)
}
按钮(操作:{
打印(“-----------”)
打印(self.classesRetrieved.count)
打印(self.classesRetrieved)
}) {
文本(“检索”)
}
}
}
}
结构内容视图\u预览:PreviewProvider{
静态var预览:一些视图{
ContentView(对象:数据)
}
}
公共类ObjectToRate:NSObject,NSCoding
{
公共变量名:String?
init(名称:String){
self.name=名称
}
公共函数编码(带编码器:NSCoder){
编码员编码(名字,福基:“名字”)
}
公共必需的初始化(编码器-解码器:NSCoder){
self.name=decoder.decodeObject(forKey:“name”)作为?字符串
}
}
var obj:ObjectToRate={
设o=ObjectToRate(名称:“hi”)
返回o
}()
风险值数据=[
obj
]
我尝试了很多东西,但不确定我做错了什么,或者这是否是一个bug

以下是我的Coredata模型:

另一件事是,当我从core中检索数据时,我得到以下结果:

<ObjectsForRate: 0x6000038fd400> (entity: ObjectsForRate; id: 0x8b8684e607da61d2 <x-coredata://0CDCAD97-CA46-402F-B638-3F0ACB6E30A7/ObjectsForRate/p5>; data: <fault>
(实体:ObjectsForRate;id:0x8b8684e607da61d2;数据:
提前感谢您的时间和帮助