AFNETSWORKINGの投稿リクエストから簡単な文字列を読む方法(JSONなし)
-
21-12-2019 - |
質問
私が必要とする情報を含む単純な文字列で応答する投稿を通してサーバーと通信するために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) - >任意の?
あなたはあなたが必要とするタイプと戻るタイプにキャストを解析することができます。