iOS (Swift): основные преобразуемые атрибуты данных - PullRequest
0 голосов
/ 10 июня 2018

У меня есть простой 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
}

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

enter image description here

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

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

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

1 Ответ

0 голосов
/ 11 июня 2018

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

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

...