我在一类中有一个协议:
@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 saveFile];
什么都没发生。我不明白这种实现有什么问题——这是一个简单的适配器模式实现。所以我需要使用委托来调用第三个类中的方法。有什么帮助吗?
您没有设置delegate
财产。你需要这样做,
-(id) initWithDataPlistManager:(DataPlistManager *) manager
{
self = [super init];
self.plistManager = manager;
self.plistManager.delegate = self;
return self;
}
另外,在DataManager
class 删除 ivar 声明,只需声明属性就足够了,ivar 会自动创建。调用委托方法如下,
if([self.delegate respondsToSelector:@selector(saveFile)] {
[self.delegate saveFile];
}
希望有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)