CoreData NSManagedObject & JSON Encodable не работает - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь создать класс объекта, который является классом, соответствующим Encodable и NSManagedObject, на iOS 13.1.2 и Swift 4.2. Это мой класс:

import CoreData

class Test: NSManagedObject, Decodable {
    @NSManaged var name: String?

    enum CodingKeys: String, CodingKey {
        case name
    }

    required convenience init(from decoder: Decoder) throws {
        let managedContext = AppDelegate.persistentContainer.viewContext

        guard let entity = NSEntityDescription.entity(forEntityName: "TestEntity", in: managedContext) else { fatalError() }

        self.init(entity: entity, insertInto: managedContext)

        let values = try decoder.container(keyedBy: CodingKeys.self)
        name = try values.decodeIfPresent(String.self, forKey: .name)
    }
}

Моя модель данных: Data model

И мой постоянный контейнер в AppDelegate:

static var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "testContainer")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {
            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()

Я используюэтот метод для создания нового экземпляра моего Test класса:

do {
    let test = try JSONDecoder().decode(Test.self, from: "{\"name\":\"Test\"}".data(using: .utf8)!)
    print(test.name)
} catch let error {
    print(error)
}

Но это дает мне следующую ошибку:

valueNotFound(Test.Test, Swift.DecodingError.Context(codingPath: [], debugDescription: "The given data did not contain a top-level value.", underlyingError: nil))

Что я здесь не так делаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...