gpt4 book ai didi

ios - 无法从我的协议(protocol)类调用委托(delegate)方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:08:57 26 4
gpt4 key购买 nike

我在一个类中有一个协议(protocol):

@protocol DataStorageManager

- (void) saveFile;

@end

@interface DataManager : NSObject
{
id <DataStorageManager> delegate;
}

@property (nonatomic, assign) id<DataStorageManager> delegate;

//methods

@end

及其实现:

@implementation DataManager

@synthesize delegate;

@end

我还有另一个类,它是第一个和第三个之间的适配器:

#import "DataManager.h"
#import "DataPlistManager.h"

@interface DataAdapter : NSObject <DataStorageManager>

@property (nonatomic,strong) DataPlistManager *plistManager;
- (void) saveFile;

@end

及其实现

#import "DataAdapter.h"

@implementation DataAdapter

-(id) initWithDataPlistManager:(DataPlistManager *) manager
{
self = [super init];
self.plistManager = manager;
return self;
}

- (void) saveFile
{
[self.plistManager savePlist];
}

@end

所以当我在第一个方法中尝试像这样调用我的委托(delegate)方法时

[delegate saveFile]; 

什么都没发生。我不明白这个实现有什么问题——这是一个简单的适配器模式实现。所以我需要使用委托(delegate)来调用第三类的方法。有帮助吗?

最佳答案

您没有设置 delegate 属性。你需要这样做,

-(id) initWithDataPlistManager:(DataPlistManager *) manager
{
self = [super init];
self.plistManager = manager;
self.plistManager.delegate = self;
return self;
}

此外,在 DataManager 类中删除 ivar 声明,只需声明属性就足够了,ivar 会自动创建。如下调用委托(delegate)方法,

if([self.delegate respondsToSelector:@selector(saveFile)] {
[self.delegate saveFile];
}

希望对您有所帮助!

关于ios - 无法从我的协议(protocol)类调用委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18636874/

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