如何创建NSURLConnection的同步版本

时间:2012-03-25 23:00:56

标签: iphone objective-c ios

我在NSURLConnection内使用NSIncrementalStore来将我的NSManagedObject与基于Rails构建的基于休息的Web服务同步。我知道+sendSynchronousRequest:returningResponse:error但我的理解是不允许我访问HTTP响应状态代码这些我需要正确处理响应,我的理解是sendSynchronousRequest返回数据,如果它在响应中200范围,如果没有范围则失败,并且实际上并没有给你更多。我假设在实例化NSURLConnection之后我将以某种方式阻止当前方法调用,并在NSURLConnection的委托设置一些可以被阻塞方法返回的值之后解除阻塞。我假设这将涉及NSLock和NSThread的某些组合,但我真的不知道从哪里开始,任何帮助将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:4)

如果将从returningResponse:参数获得的响应对象强制转换为NSHTTPURLResponse,则可以访问状态代码和其他特定于HTTP的响应值。

NSURLResponse* response = nil;
NSError* error = nil;
NSData* data = [NSURLConnection sendSynchronousRequest:request
                                     returningResponse:&response
                                                 error:&error];
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
if ([httpResponse statusCode] == 200) {
    // ...
}

答案 1 :(得分:2)

NSError* err;
NSHTTPURLResponse* response;
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];

您的HTTP响应由间接返回,因此您可以访问它。只需传入NSHTTPURLResponse,或者将其投射出来。

  

我假设在实例化NSURLConnection>之后我将以某种方式阻止当前方法调用,并在NSURLConnection的委托设置一些可以被阻止方法返回的值后解除阻塞。我假设这将涉及NSLock和> NSThread

的某种组合

我不确定你的意思。您正在执行同步请求,不需要委托。至于线程,由于您同步执行这些请求,您可能希望使用GCD在后台线程上创建它们,甚至更简单。我会调查NSOperationNSOperationQueue