我创建了一个类,这个类有自己的委托协议。 在该协议中,有一个可选方法,声明为
@protocol myClassDelegate <NSObject>
@optional
- (void) myOptionalMethod;
@end
在课程内部,我以
的形式调用myOptionalMethod[delegate myOptionalMethod];
但由于该方法是可选的,如果我在未实现该方法的委托上调用此方法,则会崩溃。
那么,如何在调用之前测试该方法是否已实现?
感谢。
答案 0 :(得分:2)
在调用委托上的选择器之前,您应该使用respondsToSelector
方法来确定委托是否具有相关方法。
例如:
if([delegate respondsToSelector:@selector(myOptionalMethod)]) {
[delegate myOptionalMethod];
}
答案 1 :(得分:2)
这很简单。
if([delegate respondsToSelector:myOptionalMethod]){
// You can now call this method without a crash
[delegate myOptionalMethod];
}
答案 2 :(得分:2)
-respondsToSelector:
对于个别方法非常有用,正如其他人在此处发布的那样。要获得更严格的解释,您可以查看某个类是否被声明为使用-conformsToProtocol:
方法实现协议:
BOOL isAGrommet = [myObject conformsToProtocol: @protocol(Grommet)];