我如何确定某个方法是否在iOS

时间:2015-12-23 13:11:02

标签: ios objective-c delegates protocols

我有两个班级(例如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,实现的东西将被忽略。

1 个答案:

答案 0 :(得分:0)

使用以下方法检查具有特定对象的respondsToSelector

// *** Check method is implemented or not ***
if([self.delegate respondsToSelector:@selector(buyTicketForMe)]) {
    // *** Invoke method ***
    [self.delegate  performSelector:@selector(buyTicketForMe) withObject:nil];
}