使用Delegate及其选择器

时间:2012-11-30 07:12:53

标签: iphone objective-c ios ipad cocoa

我有一个特定的场景,我正在尝试使用委托来完成更通用的方法,并根据正在设置的选择器调用选择器。

例如,下面是代码:

@protocol HttpRequestDelegate
@optional


- (void)testDrive:(NSData*)dataembedd;

@end


- (id)init {

    self = [super init]; 

    if (self) {

        //Initialize it here.
        self.HttpRequestdelegate = self;
    }

    return self;
}

HttpRequest *apiCaller = [[HttpRequest alloc] init];
        NSLog(@"%@",apiCaller.HttpRequestdelegate);
        [WLCC_ApiCaller executeAsync:apiCaller.HttpRequestdelegate :@selector(testDrive:) :[NSURL URLWithString:updateUrl] :wlcc_Get];

然而,在executeAsync调用时,我试图调用像测试驱动器这样的选择器:

[delegate performSelector:@selector(selector) withObject:responseData];

但是它给了我一个未知选择器的错误,但是当我注意到委托的引用时它在初始化时是相同的。

我正在尝试在不同的类中使用委托执行选择器,除此之外我还需要做什么吗?

感谢。

2 个答案:

答案 0 :(得分:0)

像这样定义你的协议:

@protocol HttpRequestDelegate <NSObject>

有一个NSObject类和一个NSObject协议。您的所有协议都应符合NSObject协议。这为您提供了respondsToSelector:和其他方法。

答案 1 :(得分:0)

我想应该是;看起来你正在实现其他函数,并尝试从那个没有继承委托的地方调用,可能会错过那个特定的函数实现。

通常,使用委托模式,因此我们可以根据需要实现该功能(或者可以说提供回调)但该类必须符合该委托。您检查过它吗?

请详细说明您的实施情况,因为我认为幕后有很多信息,如:WLCC_ApiCaller executeAsync等。