В Objective C вы можете проверить, имеет ли объект определенное свойство или сообщение?
Я хотел сделать что-то вроде этого:
if (viewController.mapView) [viewController.mapView someMethod];
Однако, если mapView не является переменной класса, это сбой. Как проверить, существует ли mapView?
Ответ 1
Для обычных селекторов вы можете использовать respondsToSelector:. Я не уверен, что это будет работать для доступа к свойствам нового стиля (как кажется, вы используете в этом примере). Чтобы проверить, отвечает ли класс данному селектору, используйте instancesRespondToSelector:.
Ответ 2
Кроме того, As Jason poninted out здесь, вы также можете использовать NSSelectorFromString для динамической проверки во время выполнения. Например.
if ([self respondsToSelector:NSSelectorFromString(elementName)])
{
[self setValue:elementInnerText forKey:elementName];
}
Ответ 3
Ой, нашел это:
if ([vc respondsToSelector:@selector(mapView)]) {
[[vc mapView] viewWillAppear:YES];
}
Ответ 4
Вот больше, чем вы просили, но категория, которую я нашел полезной для общего свойства NSObject: