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

标签 ios objective-c delegates automatic-ref-counting weak

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

相关文章:

objective-c - NSApplicationDelegate 应用程序 :openFile. 永远不会到达 openFile: 函数

ios - 为什么 UIDocumentMenu 委托(delegate)给自己不起作用?

c# - 委托(delegate) func<in T, TResult> 无法访问属性

ios - 应用程序在从库中选择媒体时崩溃,但将 nil 元素插入到数组中除外

iOS - 无法从 switch 语句跳转到此 case 标签?

ios - UITableViewCell 中的 UILabel 未使用自动布局调整大小?

objective-c - 在两列中显示结果

objective-c - 对 MVC 的一点帮助