2014-07-15 111 views
5

我有一個問題處理使用AFNetworking的JSON解析數據。使用AFNetworking 2.0異常解析JSON

這裏是我的代碼:

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
     manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
     NSDictionary *parameters = @{@"strEmail": _logInEmail.text, @"strPassword":_logInPassword.text}; 
     [manager POST:@"http://carefid.com/api/user/login.php" parameters:parameters success:^ 

      (AFHTTPRequestOperation *operation, id responseObject) { 


//NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; 
       NSString *str = responseObject[@"error"]; 
      NSLog(@"JSON: %@", str); 
      UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"rootController"]; 
      [self presentViewController:myController animated:YES completion:nil]; 

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

當我嘗試登錄的價值我得到這個錯誤:

2014-07-15 14:39:08.438 carefid[7858:60b] -[_NSInlineData objectForKeyedSubscript:]: unrecognized selector sent to instance 0x1094c67a0 
2014-07-15 14:39:08.441 carefid[7858:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_NSInlineData objectForKeyedSubscript:]: unrecognized selector sent to instance 0x1094c67a0' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0000000101d48495 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x00000001019c399e objc_exception_throw + 43 
    2 CoreFoundation      0x0000000101dd965d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 
    3 CoreFoundation      0x0000000101d39d8d ___forwarding___ + 973 
    4 CoreFoundation      0x0000000101d39938 _CF_forwarding_prep_0 + 120 
    5 carefid        0x000000010001f14f __34-[ViewController existingUserBtn:]_block_invoke + 95 
    6 carefid        0x0000000100015648 __64-[AFHTTPRequestOperation setCompletionBlockWithSuccess:failure:]_block_invoke46 + 40 
    7 libdispatch.dylib     0x0000000102669851 _dispatch_call_block_and_release + 12 
    8 libdispatch.dylib     0x000000010267c72d _dispatch_client_callout + 8 
    9 libdispatch.dylib     0x000000010266c3fc _dispatch_main_queue_callback_4CF + 354 
    10 CoreFoundation      0x0000000101da6289 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9 
    11 CoreFoundation      0x0000000101cf3854 __CFRunLoopRun + 1764 
    12 CoreFoundation      0x0000000101cf2d83 CFRunLoopRunSpecific + 467 
    13 GraphicsServices     0x00000001040bef04 GSEventRunModal + 161 
    14 UIKit        0x0000000100570e33 UIApplicationMain + 1010 
    15 carefid        0x0000000100049183 main + 115 
    16 libdyld.dylib      0x00000001028cd5fd start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

什麼會導致這個問題? responseObject是一個字典嗎? 如果我的代碼錯了,該如何處理?

回答

18

您正在將響應解析器設置爲AFHTTPResponseSerializer而不是AFJSONResponseSerializer。所以響應從來沒有被解析過JSON。

因此改變

manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

manager.responseSerializer = [AFJSONResponseSerializer serializer]; 

正如你對此有何評論服務器傳遞內容text/html,如果可能的話,服務器應該說內容爲OP類型application/jsontext/jsontext/javascript提到。

如果這是不可能改變服務器的內容類型,你可以告訴AFJSONResponseSerializer接受text/html,如:

AFJSONResponseSerializer *jsonReponseSerializer = [AFJSONResponseSerializer serializer]; 
// This will make the AFJSONResponseSerializer accept any content type 
jsonReponseSerializer.acceptableContentTypes = nil; 
manager.responseSerializer = jsonReponseSerializer; 
+0

2014年7月15日15:26:19.765 carefid [8036:60B]錯誤:錯誤Domain = com.alamofire.error.serialization.response Code = -1016「Request failed:unacceptable content-type:text/html」UserInfo = 0x10d924d10 {com.alamofire.serialization.response.error.response = 現在我得到這個錯誤.. – OshriALM

+0

您的服務器發送JSON內容到應用程序作爲'text/html'這是不正確的,如果可能應該在服務器上更改爲'應用程序/ json','text/json'或'text/javascript' – rckoenes

+0

有什麼辦法可以從我身邊處理它? – OshriALM