我正在尝试实施授权。在自定义类的.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;
答案 0 :(得分:3)
您的timer
方法存在问题。它应该是:
-(Timer *)timer
{
if (!_timer) {
_timer = [[Timer alloc] init];
}
return _timer;
}
正如您所做的那样,每次执行self.timer
时,您都会创建一个新计时器,因此该委托仅应用于众多实例中的一个。