Предварительное объявление в 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
который использует это.