2015-03-08 4 views
1

У меня есть два существующих подкласса NSManagedObject, и вам необходимо добавить новую взаимосвязь между ними.Добавить CoreDataGeneratedAccessors к существующему классу

Я попытался добавить вручную к отношениям с моделью (с обеих сторон: один - «один», а другой - «для многих»). Затем я добавил соответствующие сигнатуры методов в оба файла заголовка. Один объект называется GameEvents, а другой - Player.

В файле GameEvents.h:

@property (nonatomic, retain) Player *player 
- (void)addPlayerObject:(Player *)value; 
- (void)removePlayerObject:(Player *)value; 

и в Player.h файл

@property (nonatomic, retain) NSSet *events; 
- (void)addEventsObject:(GameEvents *)value; 
- (void)removeEventsObject:(GameEvents *)value; 
- (void)addEvents:(NSSet *)values; 
- (void)removeEvents:(NSSet *)value; 

ошибка, что я получаю вызов [self addPlayerObject:p] в источнике GameObject.m является ' непризнанный селектор. '

Я рассмотрел предложения Core Data - how to generate CoreDataGeneratedAccessors?, проверив, что отношения были правильно определены, но предложение состоит в том, чтобы регенерировать с помощью NSManagedObject, но у меня есть куча пользовательского кода, так что это невозможно.

Любая помощь была бы принята с благодарностью! Спасибо ...

ответ

0

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

  1. Не изменяйте файлы для NSManagedObject автоматически сгенерированных подклассы
  2. Создание в отдельном файле с расширением класса с собственным кодом

Таким образом, вы можете регенерировать автоматически генерируемые заголовки без перезаписи собственного кода.

В вашей ситуации я бы рекомендовал переместить весь свой собственный код в расширение класса и затем повторно создать автоматически сгенерированный файл.

+0

Большое спасибо за ответ. Я пришел к такому же выводу. Мой вопрос: может ли категория быть лучше. Похоже, что расширения должны быть в файле @implementation, чтобы они были сбиты регенерацией. –

+0

Мое решение было основано на вашем ответе @ klaus-thul, спасибо. –

0

Я переместил весь незагенерированный код в классификацию , восстановил классы NSManagedObject и успешно скомпилировал и запустил приложение. Я нашел отличный обзор классификаций и расширений at this link

Одно важное замечание: мне пришлось удалитьNSManagedObjectклассов, а затем повторно генерировать. В противном случае классы не были заменены.