无法调用从我的协议类委托方法

我有一个类的协议:

@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); } 
Interesting Posts