Iphone 使用委托及其选择器

Iphone 使用委托及其选择器,iphone,objective-c,ios,ipad,cocoa,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.

我有一个特定的场景,在这个场景中,我试图实现更通用的方法,即使用委托并根据所设置的选择器调用选择器

例如,下面是代码:

@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];
但是它给了我一个未知选择器的错误,但是当我注意到委托的引用时,它在初始化时是相同的

我试图在不同的类中使用委托执行选择器,除了这里我还需要做什么


谢谢。

如下定义您的协议:

@protocol HttpRequestDelegate <NSObject>
@协议HttpRequestDelegate

有一个
NSObject
类和一个
NSObject
协议。所有协议都应符合
NSObject
协议。这将为您提供类似
respondsToSelector:
和其他方法;看起来您正在其他位置实现函数,并尝试从未继承委托的位置调用,可能会错过特定的函数实现

通常,使用委托模式是为了根据需要实现函数(或者可以说提供回调),但该类必须符合该委托。您检查过了吗


请详细说明您的实现,因为我认为很多信息都隐藏在幕后,例如:WLCC_ApiCaller executeAsync等。

您是否尝试过[delegate performSelector:selector With Object:responseData]@EmptyStack我尝试了这一点,但得到了-[HttpRequest testDrive:]:发送到实例0x7c26520的无法识别的选择器“错误。您如何声明
HttpRequestdelegate
?什么是
self.HttpRequestdelegate
?我认为init方法在类HttpRequest中。您正在设置self.HttpRequestdelegate=self。这是错误的。我认为你正在努力完成一些不同的事情。我对此不确定。请再解释一下你想做什么。@kforkarim是的。任何冒号之前都没有任何内容(第一个除外)。现在,方法名是
executeAsync::
。这不是很自我记录。@maddy,在你的建议及其绕过if语句之后,我正在尝试这样做:if([delegate respondsToSelector:selector]){[delegate performSelector:@selector(selector)withObject:responseData];}。如果我删除这样的if语句,它就会崩溃,并出现相同的无法识别的错误,
选择器是什么?您没有显示足够的代码来确定需要哪些参数。无论哪种方式,传递给
响应选择器:
性能选择器:
的内容都必须相同。在你的评论中,它们是不同的。是的,你是对的,应该是performSelector:selector而不是@selector。顺便说一句,这是我进行的一次修改,让代表工作了。。HttpRequest*apiCaller=[[HttpRequest alloc]init];[apiCaller setHttpRequestdelegate:[NSObjectAppDelegate类]];Mohit,在我的例子中,由于没有特定的类设置委托,因此我将类类型设置为setDelegate:[类名];这对我很管用。我在某个地方的一个例子上看到了相同的内容。