質問

私が必要とする情報を含む単純な文字列で応答する投稿を通してサーバーと通信するためにAFNetworkingを使用しています。私は次のコードを使っています:

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST: MY_URL
   parameters: MY_PARAMETERS
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
        //do something
      }
      failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        //etc.
      }];
.

しかし、私の要求を実行するとこのエラーが発生したので、AFNetworkingがJSON形式であることを期待しているようです。

エラードメイン= NSCocoAerrodomainコード= 3840 "操作できませんでした 完成しました。(Cocoaエラー3840.)」(JSONテキストは配列で開始されませんでした object andオプションが設定されていない場合)userinfo= 0x1566eB00 {nsdebugdescription= JSONテキストは配列またはオブジェクトで起動しませんでした フラグメントが設定されていないオプション。}

AFNetworkingに応答がJSONオブジェクトではないことを知っていますか?私はAFHTTPClientを含むものを見ましたが、もうAFNetworkingの一部ではないようです。

役に立ちましたか?

解決

AFHTTPRequestOperationManagerまたはAFHTTPSessionManagerに応答をどのように処理するかについて説明できます。POSTを呼び出す前に、次のことができます。

manager.responseSerializer = [AFHTTPResponseSerializer serializer];
.

それからsuccessブロックで、NSDataを文字列に変換できます。

NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
.

それは、その方法を解析すること(そして有効な応答といくつかのサーバーエラーの間で区別すること)をはるかに簡単なので、JSON応答を返すようにWebサービスの変換を把握したいと思うかもしれません。

他のヒント

  NSLog(@"Response: %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
.

下記のような応答説明の詳細を取得できます

 NSLog(@"JSON: %@", [responseObject description]);
.

はるかに優れた方法が afhttpreSponseseSerializer をサブクラス化し、そこでオーバーライドすることが

Func ResponseObject(応答用:URLResponse?、データ:データ?、エラー: NSERRORPOINTER) - >任意の?

あなたはあなたが必要とするタイプと戻るタイプにキャストを解析することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top