gpt4 book ai didi

ios - 自定义委托(delegate)问题

转载 作者:行者123 更新时间:2023-12-01 17:32:53 25 4
gpt4 key购买 nike

我正在使用自定义委托(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com