1

我在 GET 请求期间处理空的问题responseObjectAFHTTPRequestOperation我正在使用 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 中的键。

4

4 回答 4

1

使用带有 [responseObject count] 的条件

    if ([responseObject count] == 0) {
        //do nothing
        return;
    }
于 2014-05-09T17:00:20.970 回答
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);
    }];
于 2014-05-09T17:01:50.933 回答
0

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

于 2014-05-09T17:06:55.407 回答
0

您可以尝试以下操作:

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);
}];
于 2014-05-09T17:16:54.740 回答