Как изменить поведение класса NSManagedObject повторно используемым способом, к которому можно получить доступ в Привязках? - PullRequest
0 голосов
/ 02 мая 2011

Xcode автоматически генерирует реализации классов для ваших сущностей NSMO - отлично.

Но нам часто нужно их настраивать. Если вы когда-нибудь забудете, что настроили эти файлы, Xcode с радостью «удалит» (перезапишет) и удалит весь ваш код.

Итак ... классический трюк заключался в том, чтобы:

  1. Создание объекта NSManagedObject в виде модели Apple
  2. Генерация классов
  3. Создание новых классов, которые используют категории для расширения исходных классов, добавляя измененное поведение
  4. Импорт пользовательских заголовков категорий, а не базовых заголовков NSMO, тем самым получая «новое» поведение

Это прекрасно работает: поместите пользовательский код в категорию, и когда вы автоматически генерируете файлы с использованием Xcode, вы никогда ничего не теряете.

Но ... теперь я использую код Bindings / Mac OS, и Bindings великолепны, но я понятия не имею, как заставить Binding "импортировать" производный заголовок (с категорией и измененными методами / custom). поведение)?

например. если у меня есть ArrayController (очень распространенный), который содержит экземпляры NSMO, вы обычно говорите ему «Имя сущности» (например, «MyCoreDataEntity»), и он запрашивает NSMO с этим именем класса. Но это никогда не загрузит категорию, поэтому она никогда не подберет настроенную версию класса.

Как вы справляетесь с этим? Либо: как вы загружаете в категорию-версию класса?

ИЛИ: как написать собственный код без использования категорий и ИЗБЕГАТЬ Xcode, удаляя весь ваш код, когда вам это нравится?

Ответы [ 2 ]

0 голосов
/ 03 мая 2011

Самым простым решением было бы создать подкласс NSArrayController, импортировать категорию и затем использовать подкласс в IB. Таким образом, ваши привязки должны автоматически знать категорию.

Раньше MoGenerator хорошо генерировал пользовательские классы без необходимости что-либо перезаписывать. Я пытаюсь обновить его или что-то в этом роде для Xcode 4.x, поскольку у оригинальных авторов, похоже, нет времени на это.

0 голосов
/ 02 мая 2011

Я должен признать, что поскольку я использую Touch Cocoa, связывание недоступно - поэтому я действительно не знаю, применимо ли мое предложение в вашем случае.

Однако, может быть, это поможет?

Существует альтернатива категориям для добавления основных данных - не такая «сложная», как категории - я знаю.

Можно использовать операторы #include:

Есть две альтернативы:

  1. создайте новый ClassFile, удалите включаемый «header.h», (удалите header.h), поместите туда дополнительный код.Он компилирует, но выдает два предупреждения: (которые понятны) предупреждение [WARN]: нет правила для обработки файла '$ (PROJECT_DIR) / Classes /../ includes_dataStuff' текста типа для архитектуры armv6 Предупреждение [WARN]: нет правила дляфайл процесса '$ (PROJECT_DIR) / Classes /../ includes_dataStuff' типа text для архитектуры armv7

  2. создаст новый «пустой» файл и поместит туда дополнительный код.Это не приводит к появлению каких-либо предупреждений.

Разница между 1 и 2 заключается в том, что, хотя форматирование кода остается в первом альтернативном режиме (с учетом принятия 2 предупреждений), во втором весь кодформат утерян и обрабатывается как обычный текст (но предупреждения нет)

Наверное, я бы предпочел первое.Конечно, единственной модификацией сгенерированного файла кода будет оператор #include.

...