我正在使用自定义委托(delegate)和协议(protocol)功能。
我实现了我的类,如下所示:
@protocol MyDelegate <NSObject>
@required
- (void)update;
@end
@interface MyHandlerClass : NSObject
{
id <MyDelegate>delegate;
}
@property (nonatomic, weak) id <MyDelegate>delegate;
@end
我的实现类看起来像:
@implementation MyHandlerClass
@synthesize delegate = _delegate;
- (void)updateRequired: (id)sender
{
if(delegate)
{
[delegate update];
}
}
@end
从另一个类(class),我将其设置为:
[sharedManager setDelegate:self];
但是当
updateRequired
被触发它显示为nil
.然后我添加了一个 setter 方法,例如:
- (void)setDelegate:(id<MyDelegate>)aDelegate
{
delegate = aDelegate;
}
一切正常!
然后我更改了
updateRequired
方法(没有自定义 setter ),如:- (void)updateRequired: (id)sender
{
if(_delegate)
{
[_delegate update];
}
}
它也工作正常!
我找不到为什么它不适用于第一种情况以及为什么它适用于其他两种情况?
请帮助我找到问题,在此先感谢
最佳答案
当你使用
if(delegate)
您指向实例变量“委托(delegate)”。
但是,当您使用
[sharedManager setDelegate:self]
这是将实例变量“_delegate”设置为“self”。
试试这个:
if (self.delegate) {
[self.delegate update];
}
关于ios - 自定义委托(delegate)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14618909/