В Objective C, можете ли вы проверить, имеет ли объект конкретное свойство или сообщение? - PullRequest
49 голосов
/ 08 октября 2009

Я хотел сделать что-то вроде этого:

if (viewController.mapView) [viewController.mapView someMethod];

Однако, если mapView не является переменной класса, происходит сбой. Как проверить, существует ли mapView?

Ответы [ 4 ]

46 голосов
/ 08 октября 2009

Для обычных селекторов вы можете использовать respondsToSelector:. Я не уверен, будет ли это работать для доступа к свойствам нового стиля (как вы видите, в этом примере) Чтобы проверить, отвечает ли класс заданному селектору, используйте instancesRespondToSelector:.

35 голосов
/ 18 апреля 2012

Кроме того, поскольку Джейсон указал здесь , вы также можете использовать NSSelectorFromString для динамической проверки во время выполнения. Э.Г.

if ([self respondsToSelector:NSSelectorFromString(elementName)]) 
{
    [self setValue:elementInnerText forKey:elementName];
}
30 голосов
/ 08 октября 2009

Упс, нашел его:

if ([vc respondsToSelector:@selector(mapView)]) {

  [[vc mapView] viewWillAppear:YES];

}
0 голосов
/ 05 января 2014

Это больше, чем вы просили, но я нашел полезную категорию для общей обработки свойств NSObject:

http://www.whynotsometime.com/Why_Not_Sometime/Category_Enhancing_NSObject.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...