我有两个班级(例如BusyMan和NotBusyMan),BusyMan想看电影,但他没时间拿票,NotBusyMan可以帮助他。 BusyMan有一个名为delegate的属性
@property(nonatomic) id<BusyManDelegate> delegate;
和NotBusyMan是BusyMan的代表
busyMan.delegate = notBusyMan;
也
@interface NotBusyMan : NSObject <BusyManDelegate>
并假设在协议BusyManDelegate
中声明了一个方法@protocol BusyManDelegate<NSObject>
@optional
- (BOOL)buyTicketForMe;
@end
当NotBusyMan为BusyMan买票时,它会退回YES。
所以BusyMan可以像这样问NotBusyMan
BOOL result = [self.delegate buyTicketForMe];
if (result) {//I may watch the film now
}else{//Oh No
}
但是buyTicketForMe是可选的,那么如果NotBusyMan没有实现该方法呢?我们都知道结果:一个例外,“发送到实例的无法识别的选择器......”,可能会引发。 所以,我想在委托调用方法之前添加条件,
if (my delegate implemented the method,and it won't raise an excetion) {
BOOL result = [self.delegate buyTicketForMe];
if (result) {//I may watch the film now
}else{//Oh No
}
}
如何编写条件部分。
顺便说一句,responseToSelector:
无济于事,一旦接收者宣布SEL,它就会撤回YES,实现的东西将被忽略。
答案 0 :(得分:0)
使用以下方法检查具有特定对象的respondsToSelector
。
// *** Check method is implemented or not ***
if([self.delegate respondsToSelector:@selector(buyTicketForMe)]) {
// *** Invoke method ***
[self.delegate performSelector:@selector(buyTicketForMe) withObject:nil];
}