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
Antwort
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.
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
- 1. Code in EventListener wird nicht sofort aufgerufen?
- 2. Promise.onSuccess sofort aufgerufen
- 3. WAMP wird nicht sofort aktualisiert?
- 4. Thumbnail wird nicht sofort aktualisiert
- 5. UITableView reloaddata lädt nicht sofort
- 6. Click Handler wird sofort in React Native aufgerufen.
- 7. didFinishNavigation nicht aufgerufen wird
- 8. IntentService wird nicht aufgerufen
- 9. CustomValidator wird nicht aufgerufen
- 10. MFMailComposeViewControllerDelegate wird nicht aufgerufen
- 11. Listener wird nicht aufgerufen
- 12. OnLocationChanged wird nicht aufgerufen
- 13. forwardInvocation wird nicht aufgerufen?
- 14. IBAction wird nicht aufgerufen
- 15. ActivityCompat.requestPermissions wird nicht aufgerufen
- 16. get_context_data wird nicht aufgerufen
- 17. onPreviewFrame() wird nicht aufgerufen
- 18. OnMouseMove wird nicht aufgerufen
- 19. onRestoreInstanceState wird nicht aufgerufen?
- 20. Dispatcher.CurrentDispatcher.BeginInvoke wird nicht aufgerufen
- 21. NSSortDescriptor wird nicht aufgerufen
- 22. onRequestPermissionsResult wird nicht aufgerufen
- 23. Dealloc wird nicht aufgerufen
- 24. OnBackPressed wird nicht aufgerufen?
- 25. observeValueForKeyPath nicht aufgerufen wird
- 26. should nicht aufgerufen wird
- 27. GridView1_RowDeleting() wird nicht aufgerufen?
- 28. onPostExecute wird nicht aufgerufen
- 29. didReceiveRemoteNotification wird nicht aufgerufen
- 30. AccessoryButtonTappedForRowWithIndexPath wird nicht aufgerufen
Wenn Sie den Dienst mit curl oder einem Webbrowser starten, erhalten Sie einen Hinweis darauf, dass der Abschluss der Anfrage kürzer ist? – Walter
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
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