没有调用协议方法的另一种情况 - 不知道我在这里做错了什么......
这是代码,省略了不必要的信息......
第一个头文件:AccessNumber.h
@protocol AddItemDelegate <NSObject>
@required
- (void) processSuccessful: (BOOL)success;
@end
@interface AccessNumber : UIViewController <UITableViewDelegate, UITableViewDataSource, ABPeoplePickerNavigationControllerDelegate, UIAlertViewDelegate> {
id <AddItemDelegate> delegate;
}
@property (retain) id <AddItemDelegate> delegate;
@end
第一个.m文件:AccessNumber.m - 我从viewdidload调用协议方法只是为了测试目的,它应该基本上从另一个方法调用,但同样的事情为了这个convo(当然试过)< / p>
#import "AccessNumber.h"
#import "History.h"
@synthesize delegate;
- (void)viewDidLoad
{
[super viewDidLoad];
....
[[self delegate] processSuccessful:YES];
}
第二个文件头:History.h
@interface History : UIViewController <UITableViewDelegate, UITableViewDataSource, AddItemDelegate> {
....
}
history.m中的方法实现
- (void) processSuccessful: (BOOL)success {
NSLog(@"SUCCESS");
}
感谢任何帮助。谢谢!
答案 0 :(得分:6)
在代码中我没有看到类似的内容:
theAccessNumber.delegate = self;
您必须将History实例设置为AccessNumber实例的委托属性。
问候。
答案 1 :(得分:3)
代码看起来有点滑稽,但你并没有告诉你的“AccessNumber”类谁是他的代表,即使你正在使“历史”类实现你自己建立的协议(否则你会收到警告)。
从“AccessNumber.m”中进行设置时,您必须像这样设置“AccessNumber”类的委托:
self.delegate = historyInstance;
从“History.m”中设置时或类似这样:
accessNumberInstance.delegate = self;
答案 2 :(得分:1)
有很多情况你应该保留一个代表,通常你的delagate会比对象活得更久。因此,将您的财产从保留更改为分配。并确保您正在设置代表。你在哪做什么?如果你的对象真的依赖它,你应该在构造函数中传递它(iniWithDelagate)。在调用delagate方法之前尝试执行NSLog,看它是不是nil。