我正在向服务器发送请求以使用 NSURLConnection block 方法获得响应。我无法在 block 中使用 return YES 或 return NO。我该如何解决这个问题?
-(BOOL)checkForValidUrl:(NSString *)url
{
__block int httpStatus=0;
NSMutableURLRequest *request=[[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:url]];
[request setValue:@"application/json" forHTTPHeaderField:@"content-type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *responseData, NSError *error)
{
httpStatus = [((NSHTTPURLResponse *)response) statusCode];
NSLog(@"httpStatus inside block:%d",httpStatus);
}
];
return NO;
}
最佳答案
不返回任何东西,而是传递一个完成 block ,稍后将检查结果通知调用者。您将不得不重新编写调用代码,以便不需要立即得到结果。
例如,假设 200 响应意味着 URL 有效:
-(void)checkForValidUrl:(NSString *)url completion:(void (^)(BOOL validURL))completion {
__block int httpStatus=0;
NSMutableURLRequest *request=[[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:url]];
[request setValue:@"application/json" forHTTPHeaderField:@"content-type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *responseData, NSError *error) {
httpStatus = [((NSHTTPURLResponse *)response) statusCode];
NSLog(@"httpStatus inside block:%d",httpStatus);
completion(200 == httpStatus);
}
];
}
关于ios - 如何返回方法的输出是使用 NSURLConnection 异步调用 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22473077/