【问题标题】:How to handle empty responseObject in AFHTTPRequestOperation如何处理 AFHTTPRequestOperation 中的空 responseObject
【发布时间】:2014-05-09 16:50:44
【问题描述】:

在 GET 请求期间处理 AFHTTPRequestOperation 中的空 responseObject 时遇到问题。我正在使用 AFNetworking 库。

如果 responsteObject 的内容是“0 个对象”,当我尝试访问 responseObject 中不可用的键时,我的应用程序会崩溃。我该如何优雅地处理它?这是我的代码的样子:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:requestURL parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
      NSLog(responseObject[@"NotAvailableKey"];
    }    
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];

如果 responseObject 的内容不是“0 个对象”,则代码可以完美运行。即使我试图访问一个不在 responseObject 中的键。

【问题讨论】:

    标签: ios objective-c afnetworking afhttprequestoperation


    【解决方案1】:

    您的代码崩溃是因为 responseObject 有时不在 NSDictionary 中。所以它不响应objectForKey:。您应该检查什么是 responseObject 类:

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager GET:requestURL parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        if ([responseObject isKindOfClass:[NSDictionary class]]
        {
             NSLog(responseObject[@"NotAvailableKey"]);
        }
        else
        {
             NSLog(@"Incorrect responseObject");
        }
    }    
    failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"Error: %@", error);
        }];
    

    【讨论】:

      【解决方案2】:

      使用带有 [responseObject count] 的条件

          if ([responseObject count] == 0) {
              //do nothing
              return;
          }
      

      【讨论】:

        【解决方案3】:

        在尝试访问键值对之前,您可能希望确保您的响应对象是一个字典。它可能会作为一个数组返回,该数组会因“非键值编码”异常而崩溃。

        【讨论】:

          【解决方案4】:

          您可以尝试以下操作:

          AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
          [manager GET:requestURL parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
            if ([responseObject respondsToSelector:@selector:(objectForKey:)]) {
               // Access the key you need to here.
               NSLog(responseObject[@"NotAvailableKey"];
            } else {
          
             // responseObject is unexpected. Handle the error case here.
            }
          
          }    
          failure:^(AFHTTPRequestOperation *operation, NSError *error) {
              NSLog(@"Error: %@", error);
          }];
          

          【讨论】:

          • AFHTTPRequestOperationManager 只返回 NSDictionary 和 NSArray。这个答案对我没有任何用处。
          • 您能告诉我预期的响应正文和您要访问的密钥吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-10-27
          • 2012-05-06
          • 1970-01-01
          • 2023-01-27
          • 1970-01-01
          • 1970-01-01
          • 2015-10-14
          相关资源
          最近更新 更多