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