无法调用从我的协议类委托方法
我有一个类的协议:
@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
类中删除伊娃宣言,只是声明财产是足够的,伊娃得到自动创build。 调用委托方法如下,
if([self.delegate respondsToSelector:@selector(saveFile)] { [self.delegate saveFile]; }
希望有所帮助!
在你的情况下,你忘记设置你的协议委托,也需要调用协议方法
由self.delegate....
我只是给如何创build协议的基本思路
也读这个问题
#DetailViewController.h #import <UIKit/UIKit.h> @protocol MasterDelegate <NSObject> -(void) getButtonTitile:(NSString *)btnTitle; @end @interface DetailViewController : MasterViewController @property (nonatomic, assign) id<MasterDelegate> customDelegate; #DetailViewController.m if([self.customDelegate respondsToSelector:@selector(getButtonTitile:)]) { [self.customDelegate getButtonTitile:button.currentTitle]; } #MasterViewController.m create obj of DetailViewController DetailViewController *obj = [[DetailViewController alloc] init]; obj.customDelegate = self; [self.navigationController pushViewController:reportTypeVC animated:YES]; and add delegate method in MasterViewController.m for get button title. #pragma mark - #pragma mark - Custom Delegate Method -(void) getButtonTitile:(NSString *)btnTitle; { NSLog(@"%@", btnTitle); }