协议方法未被调用的另一种情况-不知道我做错了什么。。。
这是代码,省略了不必要的信息。。。
第一个头文件: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调用协议方法只是为了测试目的,它基本上应该从另一个方法调用,但为了这个卷积(当然两者都尝试过)
#import "AccessNumber.h"
#import "History.h"
@synthesize delegate;
- (void)viewDidLoad
{
[super viewDidLoad];
....
[[self delegate] processSuccessful:YES];
}
第二个文件头:History.h
@interface History : UIViewController <UITableViewDelegate, UITableViewDataSource, AddItemDelegate> {
....
}
方法在历史上的实现.m
- (void) processSuccessful: (BOOL)success {
NSLog(@"SUCCESS");
}
感谢您的帮助。谢谢
在代码中,我没有看到类似的内容:
theAccessNumber.delegate = self;
必须将History实例设置为AccessNumber实例的委托属性。
谨致问候。
代码看起来有点有趣,但你没有告诉你的"AccessNumber"类谁是他的委托人,即使你正在让"History"类实现自己建立的协议(否则你会收到警告)。
当从"AccessNumber.m"中设置"AccessNumber"类时,您必须像这样设置它的委托:
self.delegate = historyInstance;
或者像这样从"History.m"中设置:
accessNumberInstance.delegate = self;
在非常特殊的情况下,您应该保留一个委托,通常您的延迟将比对象更持久。因此,将您的财产从保留改为转让。并确保您正在设置代理。你在哪里做?如果你的对象真的依赖于它,你应该把它传递给构造函数(iniWithDelagate)。试着在调用delagate方法之前执行NSLog,看看它是否为零。