2014-07-15 20 views
5

AFNetworking kullanarak JSON ayrıştırılan verileri işlerken bir sorun yaşıyorum.AFNetworking 2.0 istisnasını kullanarak JSON'u ayrıştırma

burada benim kod:

 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); 
     }]; 

bu hatası almak değeri kaydetmek amacıyla çalışıyor im:

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 

Ne bu soruna neden olabilir? responseObject bir sözlük nedir? Kodum yanlışsa, bununla nasıl başa çıkmalıyım?

cevap

18

Yanıt çözümleyiciyi AFHTTPResponseSerializer ve AFJSONResponseSerializer ayarlamıyorsunuz. Yani yanıt asla bir JSON ayrıştırılmaz.

Yani değiştirmek

manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

sunucu içerik op türü application/json, text/json veya text/javascript olduğunu söylemek gerekir mümkünse sunucu içeriği text/html teslim edilir açıklama size belirtildiği gibi

manager.responseSerializer = [AFJSONResponseSerializer serializer]; 

için .

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

2014-07-15 15: 26: 19,765 carefid [8036: 60b] Hata: Hata o sunucuların içerik türünü değiştirmek mümkün değilse

sizin gibi text/html kabul etmek AFJSONResponseSerializer söyleyebilir Domain = com.alamofire.error.serialization.response Kod = -1016 "İstek başarısız: kabul edilemez içerik türü: metin/html" UserInfo = 0x10d924d10 {com.alamofire.serialization.response.error.response = şimdi bu hatayı alıyorum .. – OshriALM

+0

Sunucunuz, JSON içeriğini uygulamada "text/html" olarak yanlış gönderiyor ve mümkünse sunucu üzerinde "application/application" olarak değiştirilmelidir. json', 'text/json' ya da' text/javascript' – rckoenes

+0

’u yanımda kullanabileceğim bir yol var mı? – OshriALM

İlgili konular