2015-06-10 2 views
0

Я пытаюсь сохранить данные при вызове веб-службы microsoft в файл при запуске приложения. Если приложение может выполнить запрос webservice, оно хранит данные в объекте NSData. Предполагая, что данные были успешно запрошены и сохранены, я хочу выполнить определенный код, который я бы НЕ хотел, если веб-служба не увенчалась успехом.Как узнать, когда содержимое NSData указывает, что запрос веб-службы не удался?

Мой запрос вебсервис выглядит следующим образом:

NSMutableURLRequest *request1 = [[NSMutableURLRequest alloc]init]; 
    [request1 setURL:[NSURL URLWithString:@"---URL---"]]; 
    [request1 setHTTPMethod:@"GET"]; 

    NSURLResponse *request1Response; 
    NSData *request1Handler = [NSURLConnection sendSynchronousRequest:request1 returningResponse:&request1Response error:nil]; 
    NSString *request1Reply = [[NSString alloc]initWithBytes:[request1Handler bytes] length:[request1Handler length] encoding:NSASCIIStringEncoding]; 
    NSData *data1 = [request1Reply dataUsingEncoding:NSUTF16StringEncoding]; 

Так в основном, ответ опускают в этот data1 объект.

При подключении к Интернету запрос выполняется нормально. Следующий код обернут в if(data1){ условием, чтобы убедиться, что запрос веб-службы успешно завершен до его выполнения. Проблема в том, что когда я отключусь от Интернета (и отключив доступ к этому веб-сервису), код внутри условного номера все еще выполняется.

Я пробовал сравнивать данные1 с nil, регистрируя данные1, чтобы делать прямое сравнение содержимого и т. Д., Но я понимаю, что этот объект data1 не равен нулю; он, вероятно, содержит какое-то сообщение об ошибке, которое я до сих пор не смог получить. Что я могу сделать в условном или в запросе webservice самостоятельно, чтобы выяснить, когда запрос не выполняется?

ответ

3

Создайте объект NSError и передайте его в качестве аргумента методу sendSynchronousRequest: тогда, если есть сеть или другая ошибка, объект err будет заполнен информацией об ошибках, поэтому он не будет равен нулю. Это означает, что вы можете проверить, если contiune еще есть ошибка

проверить код (эээ!):

NSMutableURLRequest *request1 = [[NSMutableURLRequest alloc]init]; 
    [request1 setURL:[NSURL URLWithString:@"http://www.google.com"]]; 
    [request1 setHTTPMethod:@"GET"]; 
    //object where error will be saved 
    NSError *err; 
    NSURLResponse *request1Response; 
    NSData *request1Handler = [NSURLConnection sendSynchronousRequest:request1 returningResponse:&request1Response error:&err];//pass the err here by reference 
    NSString *request1Reply = [[NSString alloc]initWithBytes:[request1Handler bytes] length:[request1Handler length] encoding:NSASCIIStringEncoding]; 
    NSData *data1 = [request1Reply dataUsingEncoding:NSUTF16StringEncoding]; 

, а затем вы можете проверить здесь:

if (err){ 
NSLog(@"error: %@", err); 
} 
+0

Ничего себе, я чувствую себя тупица. Это потрясающе. Благодаря! – JayB127

1

Вы должны хотя бы проверить ответ об ошибке, заполнив параметр указателя ошибки.

В идеале вы должны использовать другой API, который дает вам доступ к более подробной информации, такой как код состояния HTTP ответа, который вы должны использовать, чтобы определить, что произошло, даже если вы получили что-то похожее на успех.