Frage

Ich habe mir das angesehen NSURLConnection Klasse, die verwendet werden könnte, um eine Synchronisierung oder eine asynchronisierte Verbindung zu einer URL herzustellen und dann ihre Daten abzurufen ... viele Änderungen wurden an dieser Klasse mit iOS 5 vorgenommen, und ich habe gesehen, dass sie einige formale Protokolle in Bezug auf Authentifizierung oder herunterladen, aber ich sehe zum Beispiel nicht, ob die connection:didReceiveResponse: Die Nachricht (die zuvor an den Delegierten gesendet wurde und dass sie nicht mehr verfügbar ist) ist in einigen Protokollen noch verfügbar. Wie können Sie eine asynchronisierende Verbindung implementieren und abrufen, beispielsweise HTTP -Header, sobald die Antwort empfangen wird? Ich bin sicher, es gibt viel besser als zu verwenden NSURLConnection zusammen mit connection:didReceiveResponse: Nachricht .. Methoden wie stringWithContentsOfURL Lasten Sie den Inhalt immer synchron? Was verwenden Sie, um asynchronisierte Downloads in Ihren Apps zu implementieren, die veraltete Methoden vermeiden und auf Ereignisse wie _HTTP -Antwort empfangen_m usw. reagieren? Starten Sie synchrone Downloads in Hintergrundaufgaben, wenn möglich?

War es hilfreich?

Lösung

NSURLConnectionDelegate ist ein formales Protokoll geworden (es war in früheren Versionen ein informelles Protokoll). In diesem Protokoll werden die folgenden (nicht gemeldeten) Methoden deklariert:

  • connection:didFailWithError:
  • connectionShouldUseCredentialStorage:
  • connection:willSendRequestForAuthenticationChallenge:

Darüber hinaus gibt es zwei Subprotokolle, die entsprechen NSURLConnectionDelegate:

NSURLConnectionDataDelegate wird für Delegierte verwendet, die Daten in den Speicher laden, und deklariert die folgenden Methoden, von denen einige sicher vertraut sind:

  • connection:willSendRequest:redirectResponse:
  • connection:didReceiveResponse:
  • connection:didReceiveData:
  • connection:needNewBodyStream:
  • connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:
  • connection:willCacheResponse:
  • connectionDidFinishLoading:

NSURLConnectionDownloadDelegate wird für Delegierte verwendet, die Daten direkt in eine Festplattendatei speichern, und deklariert die folgenden Methoden:

  • connection:didWriteData:totalBytesWritten:expectedTotalBytes:
  • connectionDidResumeDownloading:totalBytesWritten:expectedTotalBytes:
  • connectionDidFinishDownloading:destinationURL:

Wie Sie sehen können, können Sie Ihre vorherigen Delegierten weiterhin verwenden, möglicherweise mit einigen geringfügigen Änderungen.

Weitere Informationen finden Sie in der iOS 4.3 bis iOS 5.0 API -Unterschiede Dokument und nsurlConnection.h in Ihrer lokalen Xcode -Installation. Wenn eine neue SDK -Version veröffentlicht wird, ist sie nicht ungewöhnlich, dass die Dokumentation innerhalb der Header -Dateien zuverlässiger als die in der Entwicklerbibliothek verfügbare Dokumentation ist. Es dauert eine Weile, bis letztere auf dem neuesten Stand ist.

Andere Tipps

Ich bin gerade auf das gleiche Problem gestoßen. Sieht so aus, als würde das Senden einer asynchronen Anfrage mit Blöcken vereinfacht werden und NSOperationQueue.

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

Dies bedeutet, dass der Delegierte jetzt nur für Authentifizierungs- und Fehlerprobleme verwendet wird.

NEIN! Sie sind nicht beschränkt auf die Verwendung von Authentifizierungs- und Fehlerproblemen, wenn Sie sorgfältig durch die Apple -Bibliothek suchen.

Seit Einführung +(void)sendAsynchronousRequest:queue:completionHandler: an NSConnection Class -Objekt, viele Dinge, die so viele ausführen können NSConnectionDelegate Methode wie zuvor kann jetzt in formalen Protokollen verwendet werden, die genannt werden "NSConnectionDataDelegate" & NSConnectionDownloadDelegate, Öffnen Sie ein neues Zimmer, um mehr Funktionen hinzuzufügen NSURLConnection Methoden. (von iOS5 an)

Ich denke, es ist eine Verbesserung, die ihre Verwendung nicht einschränkt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top