在Objective C中,您可以检查对象是否具有特定属性或消息吗?

时间:2009-10-08 01:44:43

标签: objective-c

我想做这样的事情:

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

但是,如果mapView不是类变量,则会崩溃。如何检查mapView是否存在?

4 个答案:

答案 0 :(得分:45)

对于普通选择器,您可以使用respondsToSelector:。我不确定这是否适用于新式属性访问(因为在这个例子中你似乎使用它)。要测试类是否响应给定的选择器,请使用instancesRespondToSelector:

答案 1 :(得分:35)

此外,正如Jason指出here,您还可以使用NSSelectorFromString在运行时动态检查。 E.g。

if ([self respondsToSelector:NSSelectorFromString(elementName)]) 
{
    [self setValue:elementInnerText forKey:elementName];
}

答案 2 :(得分:30)

糟糕,发现它:

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

  [[vc mapView] viewWillAppear:YES];

}

答案 3 :(得分:0)

这比你要求的要多,但是我发现一个类别对于一般处理NSObject属性很有用:

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