我在NSIncrementalStore中使用NSURLConnection来同步我的NSManagedObject和Rails内置的基于rest的web服务。我知道+sendSynchronousRequest:returningResponse:error,但我的理解是,它不允许我访问HTTP响应状态码之类的东西,我需要它来正确处理响应,我的理解是,如果sendSynchronousRequest在200范围内响应,它将返回数据,如果它没有,也没有给你更多,它就会失败。
我假设我必须在NSURLConnection被实例化之后阻塞当前的方法调用,并在NSURLConnection的委托设置了被阻塞的方法可以返回的值之后取消阻塞它。
我假设这将涉及到NSLock和NSThread的某种组合,但我不知道从哪里开始。
发布于 2012-03-26 07:14:28
如果将从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) {
// ...
}发布于 2012-03-26 07:23:55
NSError* err;
NSHTTPURLResponse* response;
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];您的HTTP响应是由间接返回的,所以您确实有权访问它。只需传入一个NSHTTPURLResponse,或将其强制转换为此类。
我假设在NSURLConnection >被实例化之后,我将不得不以某种方式阻塞当前的方法调用,并在
的委托设置了一些可以由被阻塞的方法>返回的值之后取消阻塞它。我假设这将涉及到NSLock和>NSThread的某种组合
我不知道你这么说是什么意思。您正在执行同步请求,不需要委托。至于线程,因为你是同步执行这些请求的,所以你可能想让它们在后台线程上,甚至更简单,使用GCD。我会调查NSOperation和NSOperationQueue。
https://stackoverflow.com/questions/9864840
复制相似问题