iOS (Swift): основные трансформируемые атрибуты данных

У меня есть простой Time класс, который принимает NSCoding протокол:

class Time: NSObject, NSCoding {

    var hours: Int

    func encode(with aCoder: NSCoder) {
        aCoder.encode(self.hours, forKey: "hours")
    }

    public required init?(coder aDecoder: NSCoder) {
        guard let hours = aDecoder.decodeObject(forKey: "hours") as? Int
            else { return nil }
        self.hours = hours
    }

    init(hours: Int) {
        self.hours = hours
    }

}

который я хочу быть атрибутом Transformable для моей Watch сущности:

final class Watch: NSManagedObject {
    @NSManaged public fileprivate(set) var time: Time
}

как показано здесь:

введите здесь описание изображения

Я успешно сохраняю это в контексте управляемого объекта, но когда я перезагружаю приложение, атрибут time становится nil.

Я что-то упустил? Почему это свойство не сохраняется? Кажется, это все, что требуется для других постов.

Большое спасибо за любую помощь!


person alex_lewis    schedule 10.06.2018    source источник


Ответы (1)


Предложение в комментариях к вопросу @IraniyaNaynesh - отвлекающий маневр.

Ответ оказывается довольно простым. Измените decodeObject на decodeInteger в init?(coder aDecoder: NSCoder) методе, и данные восстановят BLOBS, которые не nil и были успешно сохранены, из базы данных SQLite.

person alex_lewis    schedule 11.06.2018