initWithCoder и encodeWithEncoder ад. Можно ли это упростить?

С десятками моделей с десятками свойств каждая, все они могут быть сохранены на диск с помощью NSCoder протокол и NSKeyed(Un)archiverМного работы по созданию и поддержке моделей для моего iOS-приложения. Имея дюжину свойств для одной модели, я должен:

  1. определить дюжину свойств (это нормально, потому что они должны быть где-то определены)

  2. заполните initWithCoder: метод, это дюжина строк и два десятка раз, набрав / скопировав имя свойства (или постоянный ключ), 3) некоторые идут на encodeWithCoder:,

Риск ошибок (при наборе, копировании или изменении (или не изменении) таких вещей, как encodeObject: в encodeInteger: огромный. Кроме того, это просто много ручной работы, которую я предпочитаю не делать. В конце концов, у нас есть компьютеры, чтобы сделать это для нас.

Сначала я посмотрел на что-то вроде упрощения работы. Что-то вроде этого:

#define encodeObject(x) [encoder encodeObject:[self valueForKey:x] forKey:x]
#define decodeObject(x) [self setValue:[decoder decodeObjectForKey:x] forKey:x]

Но это все еще много работы. Разве это не может быть сделано любым симпелером? Я не предпочитаю делать это во время выполнения, используя самоанализ или что-то в этом роде.

Я думаю о каком-то скрипте Python, который генерирует / манипулирует файлами модели и добавляет их в Xcode. Это может быть основано на некотором файле описания JSON.

Было бы здорово, если бы Xcode запускал это автоматически на этапе предварительной сборки. Имеется в виду одно место, где я определяю каждую модель и каждое свойство один раз, и мне больше не нужно беспокоиться об ошибках и свойствах, которые я забыл кодировать / декодировать.

Есть что-нибудь подобное? Существуют ли способы добавления файлов в проект Xcode, не мешая некоторым нечитаемым файлам проекта Apple "XML"? А как насчет включения заголовков в цель? Или, может быть, какой-то другой отличный способ, чтобы спасти меня всю эту работу?

0 ответов

Другие вопросы по тегам