2012-12-11 62 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); 

//打印時會告訴我的操作字典,包括場效應初探,//但是當我直接撥打operation.response,編譯器將不構建,說明//「找不到AFHTTPRequestOperation的屬性」.... WEIRDEST THING EVER,對吧?

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);它打印並且它的反應是其中一個元素。什麼是您的控制檯輸出。 – Srikanth

+0

您是否嘗試過打印出單獨的操作響應?例如打印出狀態碼「NSLog(@」Operation response status =%@「,[NSHTTPURLResponse localizedStringForStatusCode:operation.response.statusCode]);' –

回答

15

埃爾南,如果你從你應該考慮使用AFJSONRequestOperation,因爲你會得到一個JSON字典在你的成功回調JSON響應期望的NSDictionary。無論如何,如果你想獲得一本字典從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

看起來你的服務器side不會返回有效的JSON對象,或者您在編碼時遇到了一些問題。嘗試複製並粘貼您的JSON字符串響應,如果一切正常,請使用驗證器進行檢查。另外,檢查NSJSONSerialization選項。 – amb

4

在試圖檢索meetup.com API使用AFNetworking(榮譽給Mattt T.內容爲一個偉大的框架,順便說一句),遇到了同樣的錯誤 - 「操作無法完成(可可錯誤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); 
}];