- (NSDictionary*)PostWebService:(NSString*)completeURL param:(NSString*)value
{
@try
{
NSString *urlStr =[completeURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
//NSString *urlPart=@"req=value";
//NSString *urlPart;
NSString *urlPart=[NSString stringWithFormat:@"req=%@", value];
NSLog(@"String %@",urlPart);
NSData *requestBody = [urlPart dataUsingEncoding:NSUTF8StringEncoding];
//NSLog(@"String %@",requestBody);
[request setHTTPBody:requestBody];
NSURLResponse *response = NULL;
NSError *requestError = NULL;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] ;
NSLog(@"String %@",responseString);
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData
options:kNilOptions
error:&error];
return json;
}
@catch(NSException *e)
{
NSLog(@"reason is%@",e.reason);
}
}
und ich nenne diese Methode hier ..
-(NSDictionary*)gotvall:(NSString*)req
{
@try
{
NSString *vurl=@"some url/";
// vurl=[vurl stringByAppendingString:@"req="];
// vurl=[vurl stringByAppendingString:req];
// NSLog(@"%@",vurl);
NSDictionary *json=[self PostWebService:vurl param:req];
NSLog(@"json is%@",json);
return json;
}
@catch(NSException *e)
{
NSLog(@"%@",e.reason);
}
}
Nach dem Debuggen dieser Methode bekam ich das Ergebnis als Datenparameter nil
. Kann mir jemand sagen, was ich hier falsch mache. Ich habe die vollständige URL erhalten, und wenn ich diese URL im Browser ausführte, erhielt ich die perfekten Daten, aber wenn ich den Wert von Json drucke, wird er zurückgegeben null
.
Antworten:
2 für die Antwort № 1Sie haben berichtet, dass Ihr Fehler war:
Fehlerdomäne = NSURLErrorDomain-Code = -1002"nicht unterstützte URL" UserInfo = 0x8d84960 {NSErrorFailingURLStringKey =% 20http: //www.hugosys.in/www.nett-ttp.no/api/vehicle /, NSErrorFailingURLKey =% 20http: //www.hugosys.in/ .nett-torg.no / api / vehicle /, NSLocalizedDescription = nicht unterstützte URL, NSUnderlyingError = 0x8d8bfe0 "nicht unterstützte URL"}}
Das %20
In Ihrer Fehlermeldung steht ein Leerzeichen am Anfang Ihrer URL, das Ihr stringByAddingPercentEscapesUsingEncoding
Anruf umgewandelt in %20
. Wenn Sie diesen zusätzlichen Platz entfernen, sollten Sie in gutem Zustand sein.
Einige andere Beobachtungen:
Nur um Sie zu warnen, Ihre Verwendung von
stringByAddingPercentEscapesUsingEncoding
wird das Vorhandensein eines Leerzeichens imreq
Wert. Bestimmte andere Charaktere werden jedoch nicht richtig behandelt (insbesondere&
oder+
). Wenn es möglich ist, dass diese Sortierzeichen im angezeigt werdenreq
Wert möchten Sie möglicherweise den Anruf zu entfernenstringByAddingPercentEscapesUsingEncoding
für die gesamte URL und stattdessen verwendenCFURLCreateStringByAddingPercentEscapes
(Dadurch haben Sie ein wenig mehr Kontrolle über den prozentualen Fluchtprozess)req
Wert. Siehe diepercentEscapeString
Methode in dieser Antwort: Daten an eine POST-NSURL-Anfrage anhängen.Sowohl in Ihrer Netzwerkanforderung als auch in Ihrem JSON-Analyseprozess geben Sie eine E-Mail zurück
NSError
Objekt. Ich könnte vorschlagen, dass Sie diese Werte protokollieren, wenn sie nichtnil
, die Ihnen helfen wird, Probleme in der Zukunft zu diagnostizieren.Ich stelle fest, dass Sie die Ausnahmebehandlung verwenden. Das ist in Objective-C nicht üblich Programmierung in Objective-C Führer sagt:
Umgang mit Fehlern
Fast jede App stößt auf Fehler. Einige dieser Fehler liegen außerhalb Ihrer Kontrolle, z. B. wenn der Festplattenspeicher ausgeht oder die Netzwerkverbindung verloren geht. Einige dieser Fehler können behoben werden, z. B. ungültige Benutzereingaben. Während alle Entwickler nach Perfektion streben, können gelegentlich Programmierfehler auftreten.
Wenn Sie von anderen Plattformen kommen undSprachen sind Sie möglicherweise daran gewöhnt, mit Ausnahmen für die Mehrzahl der Fehlerbehandlung zu arbeiten. Wenn Sie Code mit Objective-C schreiben, werden Ausnahmen nur für Programmierfehler verwendet, z. Dies sind die Probleme, die Sie beim Testen finden und beheben sollten, bevor Sie Ihre App versenden.
Alle anderen Fehler werden durch Instanzen von dargestellt
NSError
Klasse. Dieses Kapitel enthält eine kurze Einführung in die VerwendungNSError
Objekte, einschließlich der Arbeit mit Framework-Methoden, die möglicherweise fehlschlagen Weitere Informationen finden Sie unter Fehlerbehandlung Programmierhandbuch.Fazit: Wie ich im zweiten Punkt erwähnt habe, sollten Sie prüfen
NSError
Werte selbst zurückgeben, anstatt sich auf Ausnahmen in Objective-C zu verlassen.