_delegate respondsToSelector:selector不调用该方法

时间:2013-09-18 22:09:32

标签: ios uiviewcontroller delegates

我有一个类和一个视图控制器。 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。任何人都可以查看代码并让我知道,如果我的代码有任何问题?

1 个答案:

答案 0 :(得分:0)

确保_delegate不是nil,否则if语句永远不会为真。

您也可以简化

if(_delegate && [_delegate respondsToSelector:selector])

if([_delegate respondsToSelector:selector])

因为发送到nil的消息始终返回0或NO。在这种情况下,如果_delegate为[_delegate respondsToSelector:selector]

,则nil将返回NO

此外,您没有在标头中声明方法不会导致任何运行时差异。如果找不到这样的方法,它可能有编译器警告/错误。