实现了委托方法,但告诉它没有实现

时间:2014-04-26 17:42:34

标签: objective-c

我正在尝试实施授权。在自定义类的.h文件中,我这样做

#import <UIKit/UIKit.h>

@class Timer;

@protocol TimerDelegate

-(void)myClassDelegateMethod:(Timer *)timer;

@end

typedef void(^MyCustomBlock)(void);

@interface Timer : UILabel
@property (nonatomic, weak) id <TimerDelegate> delegate;

在.m文件中我合成了委托并调用了委托方法,首先检查委托是否实现了方法

@synthesize delegate;

-(void)countdownTime:(NSTimer *)timer 
{
    NSLog(@"countdownTime called");
    ....
    [self.delegate myClassDelegateMethod:self];
    if (self.delegate != nil && [self.delegate respondsToSelector:@selector(myClassDelegateMethod:)]) {
    [self.delegate performSelector:@selector(myClassDelegateMethod:)];
    } else {
    NSLog(@"Delegate doesn't implement myClassDelegateMethod");
    }

当我运行我的代码时,我被告知代表没有实现该方法。这是我实现它的方式 在viewController中,我声明它符合协议

@interface scViewController : UIViewController  <TimerDelegate>

然后在viewController的.m文件中,我实现了委托的方法

- (void) myClassDelegateMethod:(Timer *) sender {
    NSLog(@"Delegates are great!");
}

你能解释一下我是如何未能正确实现委托方法的吗?

更新,在viewController中,我有一个创建计时器实例的方法

-(Timer *)timer
{
    _timer = [[Timer alloc] init];


    return _timer;
}

在viewDidLoad中,我这样做

 self.timer.delegate = self;

1 个答案:

答案 0 :(得分:3)

您的timer方法存在问题。它应该是:

-(Timer *)timer
{
    if (!_timer) {
        _timer = [[Timer alloc] init];
    }

    return _timer;
}

正如您所做的那样,每次执行self.timer时,您都会创建一个新计时器,因此该委托仅应用于众多实例中的一个。