Предварительное объявление в Objective-C в дочернем классе

В нашем проекте у нас есть серия классов, которые работали нормально. В последнем обновлении Xcode 4.1 поведение, похоже, изменилось, выделив проблему в нашем коде, которая не была обнаружена ранее.

Вот ситуация, используя примеры классов, чтобы сузить проблему:

  • Класс Child наследует от класса Parent
  • Класс Parent объявляет (.h) ElementalObject (но не делает его свойством, потому что он должен быть защищен, как это используется только в Parent и его дочерних элементах ), где @class ElementalObject используется.
  • Родитель класса назначает ElementalObject (импортируется с #import) в них
  • Класс Child вызывает метод для ElementalObject через [theElementalObject doStuff];

Ошибка отображается на этом этапе:

**ARC semantic issue:**  
Receiver type 'ElementalObject' for instance message is a forward declaration

Так как класс Child не переопределяет и не переопределяет, theElementalObject Я не понимаю, почему он должен содержать импорт в ElementalObject файл заголовка, который уже импортирован в Parent файл реализации.

Кажется, если только я тоже не понимаю, что компилятор говорит мне иначе. Может кто-нибудь прояснить это?

1 ответ

Решение

Вам нужно импортировать ElementalObject.h в детском классе .m,

Пока дочерний класс не объявляет свойство и не присваивает его, он пытается вызвать для него методы. Если только заголовок для ElementalObject импортируется, понятия не имеет, какие методы theElementalObject отвечает на.

По сути, если вы делаете что-то с классом, вы должны импортировать .h где-то для .m который использует это.

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