2013-05-10 25 views
13

Aby wysłać dane rejestracyjne do serwera, Używam JSON jest w następującej formie:Wyślij zagnieżdżony JSON za pomocą AFNetworking

Oto jak wysyłam.

NSURL * url = [[NSURL alloc] initWithString:registerUrlString]; 
      AFHTTPClient * httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 
      httpClient.parameterEncoding = AFJSONParameterEncoding; 
      [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; 
      NSDictionary * params = @{@"regData": @{ 
               @"City": self.cityField.text, 
               @"Country": self.countryField.text, 
               @"Email_Id": self.emailField.text, 
               @"MobileNumber": self.numberField.text, 
               @"UserName": self.userName.text, 
               } 
             }; 

      NSMutableURLRequest * request = [httpClient requestWithMethod:@"POST" path:registerUrlString parameters:params]; 
      AFHTTPRequestOperation * operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
       NSLog(@"Success: %@", JSON); 

      } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
      NSLog(@"Error: %@", [error debugDescription]); 
      }]; 

      [operation start]; 

Ale niestety ja otrzymuję ten błąd:

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x94b3c30 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

+1

Twoja metoda nie jest generyczna. Sprawdź właściwą metodę [tutaj] (http://stackoverflow.com/questions/14958883/ios-serialize-deserialize-complex-json-generically-from-nsobject-class). Mniej podatny na błędy i konserwowalny –

Odpowiedz

32

Twój wniosek jest w porządku. Błąd Error Domain=NSCocoaErrorDomain Code=3840 jest zwracany, ponieważ serwer odpowiada nieprawidłowym obiektem JSON. NSLogoperation.responseString, aby zobaczyć, co jest odesłane.

+2

Dzięki, mattt! Naprawiłem już ten problem. Problem był taki, jak wspomniałeś. Dostawałem ciąg z serwera, a raczej z jsona. – Homam

+1

@mattt, I podklasy, 'AFHTTPSessionManager' gdzie mogę znaleźć' operation.responseString'? – Hemang

+0

@Hemang znalazłeś jakieś rozwiązanie związane z "Error Domain = NSCocoaErrorDomain Code = 3840"? – Akhtar

2

Spróbuj to uzyskać konkretny błąd

NSLog(@"Error: %@", [error debugDescription]); 
NSLog(@"Error: %@", [error localizedDescription]); 
+4

Otrzymuję następujący błąd: Error Domain = NSCocoaErrorDomain Code = 3840 "Operacja nie mogła zostać zakończona. (Błąd kakao 3840.)" (tekst JSON nie zaczął się od tablicy lub obiektu i opcji zezwolenia fragmenty nie są ustawione.) UserInfo = 0x94b3c30 {NSDebugDescription = Tekst JSON nie zaczął się od tablicy lub obiektu i opcji, aby nie zezwalać na fragmenty.} – Homam

Powiązane problemy