Как реализовать NSCoding для свойств и ivars автоматически

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

Раньше я использовал эти макросы, но это было утомительно.

Затем я обнаружил Autocoding , что является удивительным по-своему, но не может кодировать / декодировать переменные экземпляра.

Мне нужно автоматизировать весь процесс кодирования / декодирования, так как мое приложение все еще находится в разработке, и утомительно писать кодировку / декодирование для каждого ivar.

Вы можете просто переопределить метод + codableProperties и вернуть имена иваров. Это не так хорошо, как их автоматически обнаружить, но лучше, чем писать логику NSCoding вручную.

Вы можете получить список ivars, связанных с классом, из среды выполнения Objective-C – см. Функцию class_copyIvarList . Аналогично, вы можете получить значение ivar для определенного объекта с помощью object_getIvar и установить его с помощью object_setIvar . Они выглядят как основные инструменты, необходимые для автоматического кодирования ivars объекта.

В одном месте вам нужно быть осторожным, так как вам не нужно сохранять как значение для свойства, так и значение для ivar, которое его поддерживает. Таким образом, вы, вероятно, захотите сравнить список ivars с списком свойств и только кодировать / декодировать те ivars, для которых, похоже, не существует соответствующего свойства.

Кроме того, не всегда желательно, чтобы каждый последний бит состояния объекта был постоянным, поэтому вам следует подумать о том, чтобы предоставить возможность отказаться от определенных ivars (что в конечном итоге может быть столь же утомительным, как выбор). Кроме того, вам, вероятно, нужно будет определить, какие ivars вы даже можете кодировать, например, обычные типы значений и любые типы, которые сами реализуют NSCoding.

  • Как декодировать строку с использованием NSSecureCoding в Swift 3?
  • Быстрое завершение кода не работает с Cocoapods
  • Добавление границы в UIimage
  • Я удалил файл, а Xcode дает ошибку Clang
  • Строка останавливается при запуске в первый раз за день и показывает восстановление соединения с «iPhone 5» и запуск «Викторины» снова
  • Xcode 5.1 unused consts рассматривается как ошибка
  • Что противоположно stringByAddingPercentEscapesUsingEncoding :? Какая функция выдает% escape-путей?
  • Объектив C Изменение размера и задержки
  • Пользователи не могут найти наше приложение в Apple App Store
  • Какой код требуется для запуска приложения iPhone после того, как локальное уведомление было запланировано и отображено?
  • iPhone - Ширина пути, основанная на скорости касания
  • Interesting Posts

    Копирует коллекцию до итерации, чтобы предотвратить проблемы синхронизации?

    Откройте в моем приложении для (xlsx, ppt, pptx.docx) из сафари или почты, не работающей

    Как получить заголовокLabel на UIButton's prepareForInterfaceBuilder?

    ошибка во время вызова веб-службы с restkit api цель c

    Разработка iOS в Preperation для увеличения экрана

    Добавление кнопок в пользовательскую панель навигации

    Почему скриншоты iPhone 7 и iPhone 7 Plus отправляют несовместимую альфу с изображениями цвета RGB?

    Несколько многострочных меток в UITableViewCell, автоматическое расположение в раскадровке xcode 6.3.2

    показать данные в UITableView при нажатии UITextField

    Swift Core Data codegen: нет действительного NSEntityDescription для моего NSManagedObject

    Как добавить iAds от Apple в iPhone на базе OpenGL?

    Не удается запустить эмулятор Cordova iOS – PhoneGap на Mac

    Ожидается, что у SplitViewController есть контроллер вида с индексом 0 до его использования?

    Как увеличить высоту представления (xib-файл) и добавить больше элементов пользовательского интерфейса в scrollview?

    Почему NSString initWithFormat не работает. Ошибка «Ожидаемое выражение»

    Давайте будем гением компьютера.