2016-12-20 3 views
1

Ich entwickle eine App, die eine große Menge an Daten beim ersten Start (etwa 1 GB Bilder) herunterladen muss. Derzeit verwende ich die Bibliothek MZDownloadManager, um die Downloads durchzuführen. Die Bibliothek implementiert die Hintergrundmodi für die Downloads und ich habe sie sogar in die Fähigkeiten meines Ziels eingefügt. Im Prinzip habe ich dieses Szenario:Wie Code-Hintergrund-Downloads durchführen?

  • ich eine API aufrufen, die mir eine json gibt
  • ich alle Daten in Core Data speichern
  • ich alle URLs der Bilder speichern in einem Array heruntergeladen werden
  • ich sparen Core Data
  • beginne ich die Downloads
    • ich herunterladen 1 Artikel zu einer Zeit
    • Wenn eine es em ist abgeschlossen, ich den lokalen Pfad in Core Data speichern und entfernen Sie sie aus dem Array von Urls
    • ich den neuen Download zu starten
  • Wenn alles abgeschlossen ist, zeige ich die UI den Fortschrittsbalken versteckt

Ich möchte dem Benutzer die Möglichkeit geben, die App im Hintergrund zu platzieren, während die Downloads durchgeführt werden. Es funktioniert ziemlich gut auf Simulator, aber nicht auf dem Gerät. Ich denke auf dem Simulator funktioniert wegen der großen Menge an Speicher des Mac. Hast du Vorschläge?

+0

Sie können das Profil der App und sehen, ob es zu viel CPU oder Speicher ist mit. Ich weiß, dass es eine Grenze gibt für wie viel Arbeit Sie bei jedem Hintergrundanruf tun können, und vielleicht ist das das Problem. Fyi gibt es einen anderen Download-Manager hier, wenn dieser einen Fehler hat. https://github.com/Gurpartap/Cheapjack – GregP

Antwort

0

Die Klasse NSURLSession unterstützt das Herunterladen von Hintergrunddateien. Es wird Ihre Dateien herunterladen, selbst wenn Ihre App beendet wird, und wird Sie im Hintergrund neu starten, sobald der Download abgeschlossen ist.

0

Um Hintergrund-Downloads zu unterstützen, müssen Sie Ihr NSURLSession Objekt konfigurieren. Um die Sitzung zu konfigurieren, müssen Sie zunächst ein Objekt NSURLSessionConfiguration erstellen und mehrere Eigenschaften auf die entsprechenden Werte festlegen. Anschließend übergeben Sie dieses Konfigurationsobjekt beim Erstellen Ihrer Sitzung an die entsprechende Initialisierungsmethode NSURLSession.

Um ein Konfigurationsobjekt erstellen, die Hintergrund-Download unterstützt, ist wie folgt:

  • Erste Konfigurationsobjekt erstellen backgroundSessionConfigurationWithIdentifier verwendet: Methode der NSURLSessionConfiguration.
  • Konfigurieren Sie weitere Eigenschaften wie sessionSendsLaunchEvents und discretionary des Konfigurationsobjekts entsprechend.
  • das Konfigurationsobjekt Verwenden Sie Ihre NSURLSession Objekt

Beispiel zu erstellen: -

let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("bgSessionConfiguration") 
    configuration.discretionary = true 
    configuration.allowsCellularAccess = true //default true 
    let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil) 
Verwandte Themen