Можно ли переместить «код, сгенерированный core data», в суперкласс, общий для 2 целей с одинаковыми моделями данных?

#objective-c

#objective-c

Вопрос:

У меня многоцелевое приложение, и я хочу переместить идентичные классы из 2 разных целевых источников в общую структуру поверх них.

Однако два класса, которые я хочу переместить, генерируются 2 разными моделями Core Data (по одной для каждого приложения). Они идентичны, потому что сущности в обеих моделях идентичны.

Так, например, они оба имеют следующий код:

 @property (nonatomic, retain) NSSet* Character;

@interface MyClass (CoreDataGeneratedAccessors)
- (void)addCharacterObject:(Character *)value;
- (void)removeCharacterObject:(Character *)value;
- (void)addCharacter:(NSSet *)value;
- (void)removeCharacter:(NSSet *)value;
  

И этот код сложнее: SubStage1 и SubStage2 — это 2 класса модели основных данных, и оба они являются подклассами SubStage .

Здесь код отличается:

 @property (nonatomic, retain) SubStage1 * SubStage1;
  

и

 @property (nonatomic, retain) SubStage2 * SubStage2;
  

Могу ли я изменить предыдущий код из обоих подклассов на:

 @property (nonatomic, retain) Stage * Stage;
  

Мне интересно, должен ли один и тот же код взаимодействовать с другой моделью core data, в зависимости от скомпилированной цели. Боюсь, это больше не работает, потому что объекты основных данных SubStage1 и SubStage2 относятся к подклассам SubStage1 и SubStage2…

Надеюсь, вопрос ясен. Спасибо

Ответ №1:

Если классы идентичны, используйте только один, но включите его в оба целевых объекта. Каждый целевой объект может иметь свой собственный файл модели данных, но совместно использовать один и тот же модуль класса.

Комментарии:

1. Я обновил вопрос. Что делать, если мне нужно изменить свойства, сгенерированные Core Data, относящиеся к 2 разным классам, которые наследуются от одного и того же суперкласса? (смотрите вопрос)

2. Почему вы их подклассируете? Если вы создадите подкласс просто для добавления дополнительных методов и свойств, которые вы не собираетесь хранить в базе данных, это сработает. Вы можете создать объект core data, ссылающийся на класс SubStage, если вам не требуется, чтобы он работал со свойствами, которые определены в SubStage1, но не существуют в SubStage.