2016-04-19 5 views
-1

Ich habe AFNetworking von here in meinem Projekt integriert. Aber wenn ich eine Anfrage mit AFNetworking bekomme, geht es immer in den Failure-Block. Unten ist mein Code. Bitte lass mich wissen, was ich hier falsch mache?Warum AFNetworking immer in Fehlerblock gehen?

NSString *baseUrl = @"http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=ETA"; 
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
    [manager GET:baseUrl parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) { 
    } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
     NSLog(@"%@",responseObject); 

    //Always it invoke the Failure block 
    }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
     NSHTTPURLResponse *response = error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey]; 
     NSInteger statusCode = response.statusCode; 
     NSLog(@"Error Code=%ld",statusCode); 
     NSLog(@"Desc=%@",response.description); 
    }]; 

Hinweis: - Dies ist die gültige URL. http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=ETA

Auch unten ist der Fehlercode und Beschreibung: -

Error Code 200 
Error Description <NSHTTPURLResponse: 0x7fbab8509860> { URL: http://www.nactem.ac.uk/software/acromine/dictionary.py?sb=hmm } { status code: 200, headers { 
    Connection = close; 
    "Content-Type" = "text/plain; charset=UTF-8"; 
    Date = "Wed, 20 Apr 2016 00:17:27 GMT"; 
    Server = "Apache/2.2.15 (Scientific Linux)"; 
    "Transfer-Encoding" = Identity; 
} } 
+0

Haben Sie App Transportsicherheit hinzufügen http-Verbindung in Ihrem plist zu ermöglichen? –

+0

Ja, ich habe –

+0

hinzugefügt. Was ist der Fehler, den Sie im Fehlerblock bekommen? – CrimsonChris

Antwort

1

fand ich die Antwort: -

NSString *url = @"http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=hmm"; 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 

//Missing this line (Any request or response serializer dealing with HTTP is encouraged to subclass) 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
[manager GET:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
NSError* error; 
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseObject 
                  options:kNilOptions 
                   error:&error]; 
     NSLog(@"Success= %@",json); 

    }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
     NSHTTPURLResponse *response = error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey]; 
     NSInteger statusCode = response.statusCode; 
     NSLog(@"Fail=%ld",statusCode); 
    }]; 
0

einen Blick auf die Fehlerbeschreibung Nehmen, und Sie werden die hilfreich Erklärung

Domain = com.alamofire sehen .error.serialization.response Code = -1016 "Anforderung fehlgeschlagen: inakzeptabler Inhaltstyp: text/plain"

Die c orrect fix ist es, den Inhaltstyp application/json zu machen, da es scheint, JSON zu sein.

+0

Aber ich habe diese Fehlerbeschreibung nicht. Mein Fehler ist anders –

+0

Sicher überprüfen Sie "error.description"? Ihre Quelle oben überprüft "response.description". Wenn es tatsächlich anders ist, poste es hier! –

0

Das Problem mit der Art der Reaktion ist, dass AFNetworking für sucht. Wenn Sie explizit angeben, dass eine Text/Plain-Antwort erwartet wird, sollten Sie Ihren Erfolgsrückruf ausführen lassen. Die folgende Codezeile folgt direkt, wo Sie Ihre init Manager Objekt tun sollten:

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; 
Verwandte Themen