Как мне создать синхронную версию NSURLConnection - PullRequest
0 голосов
/ 26 марта 2012

Я использую NSURLConnection внутри NSIncrementalStore для синхронизации моего NSManagedObject с основанным на отдыхе веб-сервисом, встроенным в Rails.Мне известно о +sendSynchronousRequest:returningResponse:error, но, насколько я понимаю, я не смогу получить доступ к таким вещам, как код состояния ответа HTTP, который мне понадобится для правильной обработки ответа. Насколько я понимаю, sendSynchronousRequest возвращает данные, если они отвечают в диапазоне 200и терпит неудачу, если это не так и не дает вам гораздо больше, чем это.Я предполагаю, что мне каким-то образом придется заблокировать текущий вызов метода после создания экземпляра NSURLConnection и разблокировать его после того, как делегат NSURLConnection установит некоторое значение, которое может быть возвращено заблокированным методом.Я предполагаю, что это будет включать некоторую комбинацию NSLock и NSThread, но я действительно не знаю, с чего начать, любая помощь будет принята с благодарностью, спасибо.

Ответы [ 2 ]

4 голосов
/ 26 марта 2012

Если вы преобразуете объект ответа, полученный из параметра 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) {
    // ...
}
2 голосов
/ 26 марта 2012
NSError* err;
NSHTTPURLResponse* response;
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];

Ваш HTTP-ответ возвращается по косвенной ссылке, поэтому у вас есть к нему доступ.Просто передайте NSHTTPURLResponse или приведите его таким образом.

Я предполагаю, что мне придется каким-то образом заблокировать текущий вызов метода после создания экземпляра NSURLConnection> и разблокировать его после того, как делегат NSURLConnection установит некоторое значениеэто может быть> возвращено заблокированным методом.Я предполагаю, что это будет включать некоторую комбинацию NSLock и> NSThread

Я не уверен, что вы подразумеваете под этим.Вы выполняете синхронный запрос, делегат не нужен.Что касается потоков, так как вы выполняете эти запросы синхронно, вы, вероятно, захотите сделать их в фоновом потоке, или даже проще, используя GCD.Я бы посмотрел в NSOperation и NSOperationQueue .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...