委托对象未调用协议方法



协议方法未被调用的另一种情况-不知道我做错了什么。。。

这是代码,省略了不必要的信息。。。

第一个头文件: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,看看它是否为零。

最新更新