ios - 如何检查 Objective c 中是否没有服务器响应

标签 ios iphone json server nsurlconnection

我正在尝试访问网络服务。一切正常。但是,如果服务器不工作,那么我的应用程序就会崩溃。 如何处理 NO SERVER RESPONSE 。 请帮忙

这是我用于访问网络服务的代码。

NSMutableDictionary *get = [[NSMutableDictionary alloc]init];
[get setObject:@"0" forKey:@"unit"];
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:get options:kNilOptions error:nil];
NSString *jsonInputString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSString *post = [[NSString alloc]initWithFormat:@"req=%@",jsonInputString];

NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@",getCommunity]];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20.0];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];

NSError *error;
NSURLResponse *response;
NSData *responseData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (responseData != nil) {
    NSDictionary *jsonRecieveDict = (NSDictionary*)[NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    NSLog(@"jsonArray  =======%@",jsonRecieveDict);
 }
if (error)
{
    UIAlertView *errorAlert = [[UIAlertView alloc]initWithTitle:@"Servor not responding" message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [errorAlert show];
}

** 错误是由于来自服务器的无效状态代码 **

最佳答案

if (error != nil) {
    // Something went wrong...
    NSLog(@"Servor not responding %@",error.description);
    return;
}
if ([response statusCode] >= 300) {
    NSLog(@"Servor not responding, status code: %ld", (long)[response statusCode]);
    return;
}

第一个条件应该是错误检查,第二个如果响应来检查状态码然后只执行剩下的操作

同时将 NSURLResponse *response; 更改为 NSHTTPURLResponse *response

OR 差异实现

NSMutableDictionary *get = [[NSMutableDictionary alloc]init];
[get setObject:@"0" forKey:@"unit"]; 

if([NSJSONSerialization isValidJSONObject:get]){


//convert object to data
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:newDatasetInfo options:kNilOptions error:nil];


NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"your url"]];


[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setHTTPBody:jsonData];


NSURLSessionConfiguration *config=[NSURLSessionConfiguration defaultSessionConfiguration];

NSURLSession *session=[NSURLSession sessionWithConfiguration:config];

NSURLSessionDataTask *task=[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

    if(response){
        NSString *resp = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding];
        NSLog(@"Echo %@",resp);


    }

    else{
        NSLog(@"Timeout");

    }



}];
[task resume];


}

关于ios - 如何检查 Objective c 中是否没有服务器响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32452349/

相关文章:

javascript - JSON.parse 问题

javascript - ajax返回值json格式问题

ios - 如何将自定义内容添加到不同的单元格内容

iOS 应用程序加载器(Splash)

ios - 无法弄清楚为什么我在 Swift iOS 应用程序代码中收到 "Class ViewController has no initializers"错误

iphone - UIScrollView可以zoomToRect吗?

java - 具有 2 个相同类型嵌套对象的 Json 对象

ios - 方法 openURL :options:completionHandler compatibility in objective c

ios - 如何在第二个组件的特定行开始之前不在 UIPickerView 的第一个组件中显示数据?

iphone - 为什么我在启动 iPhone OS 应用程序时得到 "security policy error"?