委托对象不调用协议方法

时间:2012-03-13 01:37:22

标签: iphone objective-c ios xcode delegates

没有调用协议方法的另一种情况 - 不知道我在这里做错了什么......

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

第一个头文件: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");
}

感谢任何帮助。谢谢!

3 个答案:

答案 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。