2012-12-11 21 views
5

誰か?):私は過去2時間頭を傷つけてしまいました。 。私は@ AFNetworking操作からの応答文字列を呼び出すときに建物のエラーを取得し続ける...そのような財産はありません....AFNetworking:AFHTTPRequestOperationから応答文字列を取得できません。

私のコードを見て、私が何をしたか説明してください時間:P。..感謝:)


NSDictionary* paramDict = [NSDictionary dictionaryWithObjectsAndKeys:WebServicemd5Value, WebSermd5Variable, nil] 
; 
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:webServiceURL]]; 

[httpClient defaultValueForHeader:@"Accept"]; 

[httpClient postPath:@"method" parameters:paramDict success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"Response data: %@", responseObject); 
    NSLog(@"Reponse String: %@", operation); 

//印刷動作は、REPONSEフィールドを含め、私の運転辞書が表示されます。//しかし、私は直接operation.responseを呼び出すときに、コンパイラはしませんビルドして、// "AFHTTPRequestOperationのプロパティが見つかりません"と言っています....これまでに、WEIRDEST THING、right?

NSString* responseString = [NSString stringWithUTF8String:[responseObject bytes]]; 
    //.. Rest o f my Code.... 

}failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error retrieving data: %@", error); 
}]; 
+0

私は単にのNSLogの代わりに、操作自体でoperation.responseを印刷したいと思います。 .. –

+0

あなたは、NSLog(@ "Response object%@"、operation.response)を実行するときにそれを言っていますか?コンパイラは文句を言いますが、NSLog(@ "Operation object%@"、operation)を実行するとエラーが発生します。それは印刷し、その要素の1つとして応答を持っています。あなたのコンソール出力は何ですか? – Srikanth

+0

操作応答の個々の部分を印刷してみましたか?たとえば、ステータスコード 'NSLog(@"オペレーションレスポンスステータス=%@ "、[NSHTTPURLResponse localizedStringForStatusCode:operation.response.statusCode])を出力します。" –

答えて

15

エルナンあなたはJSON応答からNSDictionaryを期待する場合は、あなたの成功コールバックでJSON辞書を取得するので、あなたは、AFJSONRequestOperationの使用を検討すべきです。あなたはresponseObjectから辞書を取得したい場合はとにかく、次のコードを使用しよう:

NSError *error = nil; 
NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:&error]; 
if (error) { 
    NSLog(@"Error serializing %@", error); 
} 
NSLog(@"Dictionary %@", JSON); 
+0

こんにちはAmb:応答メイトに感謝...私は確かに応答オブジェクトのNSJSONSerializationをしようとしている、私はそれを置くのですか?または、UTF8文字列に変換する必要がありますか? [NSString stringWithUTF8String:[responseObject bytes]] .... –

+0

さて、私は試しましたが、サーバーはJSONパーサーによって解析されないレスポンスを返送しています。 2012-12-16 19 :17:14.536 Vidac [3561:19d03]エラードメイン= NSCocoaErrorDomainコード= 3840をシリアライズするエラー "操作が完了できませんでした(ココアエラー3840)。"(文字0の値が無効です)UserInfo = 0x94917d0 {NSDebugDescription =無効0文字の前後に値があります。 responseObjectの印刷の説明: <59397142 7871677a ......> 2012-12-16 19:17:42.592 Vidac [3561:19d03]辞書(null) –

+0

あなたのサーバー有効なJSONオブジェクトが正しく返されていないか、エンコードに問題があります。JSON文字列レスポンスをコピーして貼り付け、すべてがOKであればバリデータでチェックしてみてください。また、NSJSONSerializationオプションをチェックしてください。 – amb

4

大きな枠組みのためMattt T.にAFNetworking(賛辞を使用してmeetup.com APIからコンテンツを取得しようとしたときに、 btw)と同じエラーが発生しました - 「操作を完了できませんでした(Cocoaエラー3840)」私が抱えていた問題は、スウェーデンの文字「Ø」を含む応答データであり、解析エラーが発生していることを認識しました。この解決策は、AFNetworkingクライアントの初期化にヘッダ 'Accept-Charset:utf-8'を含めることでした。一定!

- (id)initWithBaseURL:(NSURL *)url { 
    self = [super initWithBaseURL:url]; 
    if (!self) { 
     return nil; 
    } 

    [self registerHTTPOperationClass:[AFJSONRequestOperation class]]; 

    // Accept HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1 
    [self setDefaultHeader:@"Accept" value:@"application/json"]; 
    [self setDefaultHeader:@"Accept-Charset" value:@"utf-8"]; 

    return self; 
} 
+0

"Ø"はデンマーク語です。スウェーデン語版は "Ö"です。 :) – jlowgren

5

私は、応答文字列は、「操作」オブジェクトの内部にあると考えているので、何かのように:

... 
}failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error retrieving data: %@", operation.responseString); 
}]; 
関連する問題