Соответствие протоколу NSCoding
Протокол NSCoding объявляет два метода, и оба они обязательны. Один зашифровывает ваш объект в форму архива, а другой создает новый объект путем дешифрирования архива. Обоим методам передается экземпляр типа NSCoder, который требует практически такой же обработки, как и экземпляр класса NSUserDefaults, описанный в предыдущей главе. Вы можете шифровать и расшифровывать как объекты, так и скаляры (переменные типа int и float), используя кодирование "ключ-значение".
Для поддержки архивирования в вашем объекте необходимо зашифровывать каждую переменную экземпляра в методе encoder с использованием соответствующего метода шифрования. Нам нужно реализовать метод, который инициализирует объект из экземпляра типа NSCoder, позволяя восстанавливать объект, который был ранее заархивирован.
Вот в целом и все. Если вы реализуете эти два метода для шифрования и дешифрирования всех свойств своего объекта, ваш объект будет поддерживать архивирование и его можно будет записывать в архивы и считывать оттуда.
Сохраните изменения и запустите эту версию приложения Persistence. Как видите, картина практически не изменилась. Интерфейс идентичен предыдущей версии.
Для этой новой версии потребовалось больше строк кода, чем для предыдущей (со списками свойств), поэтому у вас может возникнуть сомнение: а есть ли какое-то преимущество в использовании архивирования перед списками свойств? Что касается этого приложения, то ответ простой: нет, в данном случае, действительно, нет никакого преимущества. Однако вернитесь мысленно к последнему примеру, где пользователь мог редактировать список президентов и для каждого президента было предусмотрено по четыре различных поля, которые также можно было редактировать. Для того чтобы обеспечить персистентность данных с использованием списка свойств, это приложение должно включать итерирование списка президентов, создание экземпляра типа NSDictionary для каждого президента, копирование значения каждого из их полей в экземпляр типа NSDictionary и добавление этого экземпляра в другой массив, который уже можно было бы записать в файл списка свойств. И причем это работало бы при ограничении, состоящем в использовании только сериализуемых свойств. В противном случае не было бы и речи о списках свойств как о варианте сохранения данных без выполнения огромного объема преобразований.
- Дата: 29-12-2014, 20:28