2010-12-29 20 views
1

Meine App ruft einen Webservice auf, um Daten zu laden. Jedes Mal, wenn ich die Anfrage sende, wird die Methodenverbindung: didReceiveData: sehr schnell aufgerufen, und ich gebe eine NSLog-Anweisung in diese Methode ein. Ich kann sehen, dass die Daten genauso sind wie im HTTP-Header-Feld Content-Length. Es sollten also keine weiteren Daten mehr empfangen werden müssen. Tatsächlich wird Verbindung: didReceiveData nicht mehr aufgerufen. Aber mein connectionDidFinishLoading wird jedes Mal genau 1 Minute später aufgerufen. Irgendeine Idee was ist los?connectionDidFinishLoading wird nicht sofort aufgerufen

+0

Wenn Sie den Dienst mit curl oder einem Webbrowser starten, erhalten Sie einen Hinweis darauf, dass der Abschluss der Anfrage kürzer ist? – Walter

+0

Da es sich um einen Webservice handelt, weiß ich nicht, wie man curl benutzt, um diesen Webservice-Anruf zu tätigen, ich frage mich nur, ob es möglich ist. Wenn mein Programm den Webservice-Aufruf jedoch wahrscheinlich nicht aufruft, ist dies die Fehlermeldung des Servers, die zurückgegeben wird. Die Verzögerung passiert nur, wenn ich die Daten richtig erhalte. Ich frage mich nur, ob das serverseitige Problem, weil ich mein Programm benutze, um einen anderen Webservice aufzurufen, der öffentlich und frei im Web ist, ich das Ergebnis auch sehr schnell bekommen habe. – user556623

+0

Jetzt frage ich mich, wie NSURLConnection zu beurteilen, ob Daten empfangen werden, abgeschlossen und rufen Sie dann die ConnectionDidFinishLoading-Methode. Etwas wie ein '\ 0', um anzuzeigen, dass die Daten fertig übertragen werden? Oder vergleichen Sie einfach die Inhaltslänge im HTTP-Header und die Bytes werden empfangen? Wenn es von '\ 0' beurteilt wird, sendet die Serverseite dieses Byte nicht, so dass mein Programm intern wartet, bis es Timeout ist (deshalb verzögert es genau 1 Minute, um connectionDidFinishLoading jedes Mal aufzurufen). – user556623

Antwort

1

connection:didReceiveData: wird oft aufgerufen. Sie müssen diese Daten übernehmen und an die Daten anhängen, die Sie beim letzten Aufruf erhalten haben. Nur wenn Sie connectionDidFinishLoading empfangen, wissen Sie, dass die Übertragung abgeschlossen ist und Sie alle diese Daten haben.

Also, nur weil Sie einige Daten erhalten, bedeutet es nicht, dass es fertig ist. Es ist sehr wahrscheinlich, dass der Server so lange braucht, um die Anfrage oder andere Probleme irgendwo in Ihrem Code abzuschließen, wie eine übermäßige Datenverarbeitung in Ihren Callbacks, die die Ausführung des letzten Callbacks verzögert.

+0

Nein, ich habe eine NSLog-Anweisung in die Verbindung eingefügt: didReceiveData: method, ich bin mir sicher, dass sie in diesem Fall nur einmal aufgerufen wird. – user556623