1

GET リクエスト中の空の処理に問題がありますresponseObjectAFHTTPRequestOperationAFNetworking ライブラリを使用しています。

responsteObject のコンテンツが「0 オブジェクト」の場合、responsteObject で使用できないキーにアクセスしようとすると、アプリケーションがクラッシュします。どうすればそれを優雅に処理できますか?私のコードは次のようになります。

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

responseObjectNSDictionary でない場合があるため、コードがクラッシュします。そのため、 には応答しません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 に答える
1

[responseObject count] で条件を使用する

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

キー値にアクセスする前に、応答オブジェクトが辞書であることを確認する必要があります。「キー値コード化されていない」例外などでクラッシュする配列として返される可能性があります。

于 2014-05-09T17:06:55.407 に答える