В Java вы можете использовать instanceof
, чтобы проверить, расширяет ли класс другой класс или реализует интерфейс.
В Objective-C вы можете использовать isKindOfClass
, чтобы проверить, расширяет ли класс другой класс:
if ([myObject isKindOfClass:[AnClass class]]) { }
Но как я могу проверить, расширяется ли класс на категорию ?
РЕДАКТИРОВАТЬ 2
Мой код первого EDIT был, к сожалению, немного запутанным и бессмысленным, извините!Теперь вот мой новый код:
Я объясню всю проблему:
У меня есть класс ViewCustomerCreate
, который расширяет UITableViewController
.ViewCustomerCreate
расширяется на категорию ICheckBox
.Это мой код, который не работает:
- (void)closeModalView {
UINavigationController *parent = (UINavigationController *)self.navigationController.parentViewController;
UIViewController *parentViewContr = parent.topViewController;
if ([parentViewContr isKindOfClass:[id<ICheckBox> class]]) { // ERROR-MESSAGE see below
id<ICheckBox> parent2 = (id<ICheckBox>)parentViewContr; // works fine :-)
[parent2 setSelectedElementId:checkedIndex]; // works fine :-)
}
[self.navigationController dismissModalViewControllerAnimated:YES];
}
Сообщение об ошибке:" ошибка: 'id' не является именем класса Objective C или псевдонимом"
Я думаю, что я не могу использовать isKindOfClass , чтобы проверить, расширяется ли класс на категорию, не так ли?
PS: Что делатьЯ хочу?У меня есть общее модальное представление с флажками, и если я закрою это представление, родительское представление должно получить информацию о том, что выберет пользователь.
РЕДАКТИРОВАТЬ 3
OMG, ясмешанная категория с протоколом !!Аааааххххх ^^
РЕШЕНИЕ:
if ([parentViewContr conformsToProtocol:@protocol(ICheckBox)]) {