so erstellen Sie eine synchrone NSURLConnection Anfrage
Ich will zu schaffen, einen synchronen nsurlconnection Anfrage. Ja ich weiß, das ist blöd und kenne ich die Einschränkungen (einfrieren der UI -) aber der Grund, warum ich möchte, um dies zu implementieren, um garnet die Daten, die ich erhalte vom server empfangen wurden, in der Reihenfolge gesendet, das Ist einer der Vorteile einer synchronen Verbindung.. wenn ich das richtig gelesen habe.
Werde ich mich mit "Grand Central Dispatch" zu erreichen, einige multi-threading, um die sync-Anforderung und habe es nicht-Effekt der Benutzeroberfläche der Haupt-thread... aber das kann später kommen, denn jetzt würde ich mag, um master die sync-Verbindung.
Das einzige Problem ist, dass ich bin mir nicht ganz sicher, wie ich meinen Anschluss wie synchron..
Hier ist mein code.
- (void)loadComics{
[comics removeAllObjects]; //clears object of any old values
[[self tableView] reloadData];
NSURL *url = [NSURL URLWithString:@"http://www.comicbookresources.com/feed.php?feed=previews"];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
//clear any existing connection
if (connectionInProgress) {
[connectionInProgress cancel];
[connectionInProgress release];
}
[xmlData release];
xmlData = [[NSMutableData alloc] init];
connectionInProgress = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[xmlData appendData:data];
}
- (void) connectionDidFinishLoading:(NSURLConnection *)connection{
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];
[parser setDelegate:self];
[parser parse];
[parser release];
[[self tableView] reloadData];
}
Beispielen wäre toll.
naja soweit ich informiert bin async, kann manchmal empfangen von Daten in falscher Reihenfolge. Die Datenbank-engine die ich habe zu kommunizieren, verlangt von mir, dies zu tun syncronosly so wichtig es ist, zu empfangen die Daten in der richtigen Reihenfolge. Warum tun Sie denken, es ist ein Indikator für schlechtes design, ich bin daran interessiert, Ihre Perspektive, denn ich bin derzeit nur dabei, wie ich beauftragt worden, aber wenn ich zusammen ein Fall für die Datenbank, Ingenieur, warum sollte er also sonst hätte ich Intresse an der Anhörung Ihre Meinung.
Das ist nicht korrekt — Sie müssen nicht sorgen zu machen über den Empfang
connection:didReceiveData:
Rückrufe aus der Bestellung. Was du geschrieben hast sieht gut aus — kann man einfach verketten die Stücke von Daten, wie Sie Sie erhalten, und etwas mit den kompletten Daten in connectionDidFinishLoading:
. Dies wäre nur dann ein problem, wenn, aus irgendeinem Grund, Sie liefen mehrere NSURLConnections zur gleichen Zeit, alle mit der gleichen delegieren. Aber im Allgemeinen werden Sie nicht wollen, zu tun!okay cool ich bekommen, was Ihr sagen, Dank für die Klarstellung.
InformationsquelleAutor C.Johns | 2012-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, eine synchrone Verbindung verwenden, müssen Sie +sendSynchronousRequest:returningResponse:Fehler es gibt keine andere einfache Möglichkeit, dies zu tun.
Hinweis, dass es veraltet, zu Gunsten der
NSURLSession
, aber es keine Unterstützung für synchrone Verbindung direkt.kein problem, nur daran erinnern, die Antwort akzeptieren, wenn es das tut, was Sie es benötigen.
es wird.. ich gesucht habe, die falsche Sache.. das ist trotzig, was ich brauche, zu verwenden. hoffentlich kann ich arbeiten, dachte er.
Das beschreibt es gut stackoverflow.com/questions/6212453/...
InformationsquelleAutor Richard J. Ross III
Synchrone Vernetzung, auch in einem hintergrund-thread, nicht der Weg zu gehen. Sie können nicht richtig unterstützen Stornierung, und Sie verschwenden Ressourcen, die Ausgliederung von einem hintergrund-thread, verbringen die meiste Zeit im Leerlauf. Dies ist zwar meist eine Akademische Sorge, wenn Sie nur Absenden einer URL-Anforderung, es kann noch eine Geschichte, wenn Sie senden eine große Anzahl von Ihnen.
Brauchen Sie sich keine sorgen über den Empfang
connection:didReceiveData:
Rückrufe aus der Bestellung. Was du geschrieben hast sieht gut aus — kann man einfach verketten die Stücke von Daten, wie Sie Sie erhalten, und etwas mit den kompletten Daten inconnectionDidFinishLoading:
.Dem, was Sie haben Grund zur Sorge ist, empfangen von mehreren
connection:didReceiveResponse:
Rückrufe im Fall von Umleitungen. Sehen Die Dokumentation von Apple. In diesem Fall müssen Sie einfach zurücksetzen möchten, müssen die Daten, die Sie angesammelt haben, so weit mit[xmlData setLength:0]
.Schließlich, wenn Sie können, erfordert iOS5 oder 10.7 und brauchen nicht die Komplexität einer NSURLConnection delegieren, dann ist der neue
+[sendAsynchronousRequest:queue:completionHandler:]
Methode ist ein netter, nicht böse alternative zu+[sendSynchronousRequest:returningResponse:error]
.InformationsquelleAutor Nick Hutchinson