2012-12-11 12 views
5

Ktoś?): Mam problem, który sprawił, że podrapałem się przez ostatnie 2 godziny, i najprawdopodobniej jest to bardzo prosta, głupia rzecz, której mi brakuje . Ciągle pojawia się błąd konstrukcyjny, kiedy wywołuję ciąg odpowiedzi z operacji @ AFNetworking ... Tak jak nie ma TAKIEJ WŁASNOŚCI ....AFNetworking: Nie można uzyskać ciągu odpowiedzi z AFHTTPRequestOperation

Proszę spojrzeć na mój kod i wyjaśnić, co mi się nie udało To czas: p .. Dzięki :)


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

// operacja drukowania pokaże mi słownika pracy, w tym polu réponse, // ale kiedy wywołać bezpośrednio operation.response, kompilator nie będzie Zbuduj, stwierdzając, że // "Właściwość nie znaleziono dla AFHTTPRequestOperation" .... WEIRDEST THING EVER, prawda?

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

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

Chciałbym po prostu wydrukować operation.response w NSLog zamiast samej operacji. .. –

+0

Czy mówisz, że kiedy robisz NSLog (@ "Response object% @", operation.response); - narzeka kompilator, ale kiedy wykonasz NSLog (@ "Obiekt operacji% @", operacja); drukuje i ma odpowiedź jako jeden z jego elementów. Jakie są twoje wyniki konsolowe. – Srikanth

+0

Czy próbowałeś wydrukować poszczególne fragmenty operacji? Na przykład wydrukowanie kodu statusu "NSLog (@" Stan odpowiedzi operacji =% @ ", [NSHTTPURLResponse localizedStringForStatusCode: operation.response.statusCode]);' –

Odpowiedz

15

Hernan, jeśli oczekujemy NSDictionary z odpowiedzi JSON należy rozważyć użycie AFJSONRequestOperation, bo masz słownika JSON w swój sukces zwrotnego. W każdym razie, jeśli chcesz uzyskać słownika z responseObject, spróbuj użyć następującego kodu:

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

hi Amb: Dzięki za odpowiedź Mate ... Na pewno będę próbować NSJSONSerialization dla obiektu Response, czy umieść go tak, jak jest? Czy powinienem przekonwertować go na ciąg znaków UTF8? [String NSStringWithUTF8String: [responseObject bytes]] .... –

+0

Cóż, wypróbowałem to, ale serwer zwraca mi odpowiedź, która nie jest poprawnie analizowana przez parser JSON .. Otrzymuję: 2012-12-16 19 : 17: 14.536 Vidac [3561: 19d03] Błąd serializacji Error Domain = NSCocoaErrorDomain Code = 3840 "Operacja nie mogła zostać zakończona. (Błąd kakao 3840.)" (Niepoprawna wartość wokół znaku 0.) UserInfo = 0x94917d0 {NSDebugDescription = Nieprawidłowy wartość wokół znaku 0.} Drukowanie opisu odpowiedziObiekt: <59397142 7871677a ......> 2012-12-16 19: 17: 42.592 Vidac [3561: 19d03] Słownik (null) –

+0

Wygląda na to, że twój serwer strona nie zwraca poprawnego obiektu JSON lub masz problemy z kodowaniem.Spróbuj skopiować i wkleić odpowiedź łańcuchową JSON i sprawdzić za pomocą walidatora, czy wszystko jest w porządku. Sprawdź również opcje NSJSONSerialization. – amb

4

Podczas próby pobrania zawartości z meetup.com api korzystając AFNetworking (Uznanie Mattt T. na wielkie ramy, btw), wystąpił ten sam błąd - "Operacja nie mogła zostać zakończona (błąd kakao 3840)". Zdałem sobie sprawę z tego, że miałem problem z danymi odpowiedzi zawierającymi szwedzki znak "Ø", co spowodowało błąd parsowania. Rozwiązaniem było włączenie nagłówka "Accept-Charset: utf-8" podczas inicjowania klienta AFNetworking. Naprawiony!

- (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

"Ø" jest duński. Szwedzka wersja byłaby "Ö". :) – jlowgren

5

wierzę ciąg odpowiedź jest wewnątrz „operacja” obiektu, więc coś takiego:

... 
}failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error retrieving data: %@", operation.responseString); 
}]; 
Powiązane problemy