我创建了一个类,这个类有自己的委托协议。在该协议中,有一个可选的方法,声明如下
@protocol myClassDelegate <NSObject>
@optional
- (void) myOptionalMethod;
@end在类中,我有一个对myOptionalMethod的调用,其形式为
[delegate myOptionalMethod];但由于该方法是可选的,如果我在尚未实现该方法的委托上调用该方法,它将崩溃。
那么,如何在调用该方法之前进行测试,以确定该方法是否已实现呢?
谢谢。
发布于 2011-01-24 06:02:48
这很简单。
if([delegate respondsToSelector:myOptionalMethod]){
// You can now call this method without a crash
[delegate myOptionalMethod];
}发布于 2011-01-24 06:02:00
在对委托调用选择器之前,应使用respondsToSelector方法确定委托是否具有相关方法。
例如:
if([delegate respondsToSelector:@selector(myOptionalMethod)]) {
[delegate myOptionalMethod];
}发布于 2011-01-24 06:14:23
正如其他人在这里发布的那样,-respondsToSelector:对于单独的方法很有用。对于更严格的解释,您可以查看类是否被声明为使用-conformsToProtocol:方法实现协议:
BOOL isAGrommet = [myObject conformsToProtocol: @protocol(Grommet)];https://stackoverflow.com/questions/4776836
复制相似问题