Сохранение пользовательского класса в массив в CoreData SwiftUI после сбоя закрытия приложения - PullRequest
0 голосов
/ 20 октября 2019

Я получаю сообщение об ошибке ниже, когда я закрываю свое приложение и затем пытаюсь сохранить его в ядре при перезагрузке приложения.

ошибка: серьезная ошибка приложения. Исключение было обнаружено во время обработки изменений Core Data. Обычно это ошибка в наблюдателе NSManagedObjectContextObjectsDidChangeNotification. - [__NSSingleObjectArrayI сравнить:]: нераспознанный селектор, отправленный экземпляру 0x600002291510 с userInfo (null)

Когда я впервые запускаю приложение свежим после удаления его из симулятора, оно работает нормально, хотя после закрытия программы ипопробуйте добавить в ядро ​​снова, я получаю ошибку выше.

Вот мой код:

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: enter image description here

Другое дело, когда я получаю данные из ядра, я получаю это:

<ObjectsForRate: 0x6000038fd400> (entity: ObjectsForRate; id: 0x8b8684e607da61d2 <x-coredata://0CDCAD97-CA46-402F-B638-3F0ACB6E30A7/ObjectsForRate/p5>; data: <fault>

Заранее благодарим за ваше время и помощь.

...