我有一个类和一个视图控制器。 class有_delegate respondsToSelector:selector。但它不是调用方法(选择器)。查看下面的代码后,请告诉我我做错了什么。仅供参考,此代码之前有效,但突然停止工作。
MyClass.h:
@protocol MyClassDelegate <NSObject>
@optional
-(void) receivedEvent:(TripEvent *) event;
@end
@interface MyClass : NSObject<MyClassEngine>
@property(assign) id<MyClassDelegate> delegate;
@property BOOL delegateOnMainThread;
-(id) initWithDelegate:(id<UbiTripRecorderDelegate>) tripDelegate
onMainThread:(BOOL) onMainThread;
- (void) dispatchDelegate:(SEL)selector
withObject:(id)obj;
MyClass.m包含以下代码:
#import "MyClass.h"
@implementation MyClass
....
....
-(void) startPlaying {
[self dispatchDelegate:@selector(receivedEvent:) withObject:newEvent];
}
- (void) dispatchDelegate:(SEL)selector withObject:(id)obj {
@try {
if(_delegate && [_delegate respondsToSelector:selector]) {
NSLog(@"I can't come to this point");
}
}
}
我还在视图控制器(MyViewController.h)中添加了以下代码:
@interface MyViewController : BaseViewController<MyClassDelegate>
最后在MyViewcontroller.m中实现了该方法:
-(void) receivedEvent : (TripEvent *) event {
NSLog(@"I'm called");
}
问题是if(_delegate&amp;&amp; [_delegate respondsToSelector:selector]) - 逻辑永远不会返回true。任何人都可以查看代码并让我知道,如果我的代码有任何问题?
答案 0 :(得分:0)
确保_delegate
不是nil
,否则if语句永远不会为真。
您也可以简化
if(_delegate && [_delegate respondsToSelector:selector])
到
if([_delegate respondsToSelector:selector])
因为发送到nil
的消息始终返回0或NO。在这种情况下,如果_delegate为[_delegate respondsToSelector:selector]
nil
将返回NO
此外,您没有在标头中声明方法不会导致任何运行时差异。如果找不到这样的方法,它可能有编译器警告/错误。