ios - 如何返回方法的输出是使用 NSURLConnection 异步调用 block

标签 ios ios5 asynchronous nsurlconnection objective-c-blocks

我正在向服务器发送请求以使用 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/

相关文章:

ios - 如何在 UITableView 中实现 rowspan

ios - Swift 管理内存

ios - Apple Watch 在 15 分钟后失去与 iOS 应用程序的连接

ios - ios设置中缺少设备管理

objective-c - 在 View Controller 之间拖放(包含在同一 View Controller 中)

objective-c - 动画在 iOS6 中工作,在 iOS5 中有错误

ios - 如何在 Xcode 4.2 中使用适用于 iOS 的 Core-Plot 框架?

iphone - Objective C - 异步http请求阻塞程序

python - Python中的异步方法调用?

c++ - boost::asio 接受套接字错误已经打开