У меня есть пара пользовательских подклассов 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. Я не знаю, что может быть причиной изменения его типа или неправильного сообщения ...