Ios 如何判断NSData的内容何时表明webservice请求失败?

Ios 如何判断NSData的内容何时表明webservice请求失败?,ios,objective-c,web-services,cocoa-touch,nsobject,Ios,Objective C,Web Services,Cocoa Touch,Nsobject,当我的应用程序启动时,我正在尝试将microsoft web服务调用中的数据持久化到文件中。如果应用程序能够完成webservice请求,则它将数据存储在NSData对象中。假设数据已成功请求和存储,我希望执行某些代码,如果Web服务不成功,我将不希望执行这些代码 我的Web服务请求如下: NSMutableURLRequest *request1 = [[NSMutableURLRequest alloc]init]; [request1 setURL:[NSURL URLWi

当我的应用程序启动时,我正在尝试将microsoft web服务调用中的数据持久化到文件中。如果应用程序能够完成webservice请求,则它将数据存储在NSData对象中。假设数据已成功请求和存储,我希望执行某些代码,如果Web服务不成功,我将不希望执行这些代码

我的Web服务请求如下:

    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对象中

当连接到internet时,请求将正常执行。下面的代码被包装在一个
if(data1){
条件中,以确保webservice请求在执行之前成功。问题是,当我断开与internet的连接(并切断对该webservice的访问)时,条件中的代码仍在执行


我尝试将data1与nil进行比较,记录data1以直接比较内容,等等,但我推测data1对象不是nil;它可能包含某种失败消息,到目前为止我无法访问。我可以在条件请求或webservice请求本身中做些什么来确定请求何时失败

您至少应该通过填充错误指针参数来检查错误响应


理想情况下,您应该使用不同的API,该API允许您访问更多详细信息,例如响应HTTP状态代码,您应该使用该代码来确定发生了什么,即使您确实获得了看起来成功的结果。

您至少应该通过填充错误指针参数来检查错误响应


理想情况下,您应该使用不同的API,该API允许您访问更多详细信息,例如响应HTTP状态代码,即使您确实获得了看起来成功的结果,您也应该使用该代码来确定发生了什么。

创建一个NSError对象并将其作为参数传递给sendSynchronousRequest:方法,然后如果有network或其他错误时,err对象将填充错误信息,因此它不会为零。这意味着您可以检查(!err)是否存在错误

检查代码:

  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);
}

创建一个NSError对象并将其作为参数传递给sendSynchronousRequest:方法,然后如果存在网络错误或其他错误,err对象将填充错误信息,因此它将不会为零。这意味着您可以检查(!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);
}

哇,我觉得自己像个傻瓜。这太完美了。谢谢!哇,我觉得自己像个傻瓜。这太完美了。谢谢!