У меня есть пара пользовательских подклассов NSBox, которые называются OuterBox и InnerBox. Я настроил свое представление в XIB и расположил иерархию следующим образом:
OuterBox : NSBox
NSButton
NSBox
InnerBox : NSBox
...and some other views
Идея состоит в том, что когда NSButton нажимается, в методе IBAction я хочу получить супервизор кнопки, а затем, исходя из этого, получить InnerBox, который находится в том же OuterBox, что и кнопка.
Для этого я перебираю подпредставления OuterBox и проверяю их тип:
for (NSObject *subview in [outerBox subviews]) {
// this never evaluates to true...
if ([subview isKindOfClass:[InnerBox class]]) {
// ...
}
}
Проблема в том, что мой оператор if
никогда не срабатывает. subview
отображается в отладчике как NSView. Согласно документации, isKindOfClass:
возвращает
YES
, если получатель является экземпляром aClass или экземпляром любого класса, наследуемого от aClass, иначеNO
.
Я понимаю, почему он возвращает NO
: потому что InnerBox является типом NSView, но не наоборот. Но я не знаю, почему subview
является UIView, когда это должен быть InnerBox.
Я импортировал InnerBox.h и убедился, что InnerBox действительно является InnerBox в XIB. Я не знаю, что может привести к изменению его типа или неправильному сообщению...