【发布时间】:2014-08-19 10:16:54
【问题描述】:
我正在尝试创建一个在 iOS 中调用被调用者的回调函数的方法。浏览动态函数调用后,这是我尝试过的:-
标题:-
+(void)url:(NSString *)url handler:(NSObject *)handler callback:(NSString *)callbackfn;
实现:-
+(void)url:(NSString *)url handler:(NSObject *)handler callback:(NSString *)callbackfn{
NSURLRequest *imageLoader = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
[NSURLConnection sendAsynchronousRequest:imageLoader queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
SEL s = NSSelectorFromString(callbackfn);
if ([handler respondsToSelector:s]) {
[handler performSelector:s];
}else{
NSLog(@"does not responds to handler %@",[handler self]);
}
}];
}
调用它的 ViewController:-
-(IBAction)loadImage:(id)sender{
NSString *url = @"https://s3.amazonaws.com/uifaces/faces/twitter/ateneupopular/128.jpg";
[NetCall url:url handler:self callback:@"imageRec"];
}
-(void)imageRec{
NSLog(@"net call done");
}
但是当代码执行时,它会在 LOG 中打印“不响应处理程序”。 我是否以错误的方式传递函数名称?
日志:-
2014-08-19 17:54:58.419 Testing[2194:78586] does not responds to handler <ViewController: 0x7b16c390>
【问题讨论】:
-
你能发布显示的确切日志吗?
-
@jbouaziz:我已经更新了问题。
-
您能评论
if语句并通过调用[handler performSelector:s];故意使应用程序崩溃吗?这个堆栈跟踪应该更有用。
标签: ios objective-c callback