AFNetworking i transfery w tle

Trochę się mylę, jak skorzystać z nowego systemu iOS 7NSURLSession funkcje przesyłania w tle iAFNetworking (wersje 2 i 3).

widziałemWWDC 705 - What’s New in Foundation Networking sesja i zademonstrowali pobieranie w tle, które trwa po zakończeniu aplikacji lub nawet zawiesza się.

Odbywa się to za pomocą nowego APIapplication:handleEventsForBackgroundURLSession:completionHandler: oraz fakt, że delegat sesji w końcu otrzyma wywołania zwrotne i może wykonać swoje zadanie.

Zastanawiam się więc, jak używać go z AFNetworking (jeśli to możliwe), aby kontynuować pobieranie w tle.

Problem polega na tym, że AFNetworking w wygodny sposób używa API opartego na blokach do wykonywania wszystkich żądań, ale jeśli aplikacja zakończy się lub ulegnie awarii, ten blok również zniknie. Więc jak mogę wykonać zadanie?

A może coś mi tutaj brakuje ...

Pozwól mi wyjaśnić, co mam na myśli:

Na przykład moja aplikacja jest aplikacją do przesyłania zdjęć, powiedzmy, że mamPhotoMessage obiekt reprezentujący jedną wiadomość, a ten obiekt ma właściwości takie jak

state - opisz stan pobierania zdjęć.resourcePath - ścieżka do ostatecznego pobranego pliku zdjęcia.

Więc kiedy otrzymuję nową wiadomość z serwera, tworzę nowąPhotoMessage obiekt i zacznij pobierać jego zasób fotograficzny.

PhotoMessage *newPhotoMsg = [[PhotoMessage alloc] initWithInfoFromServer:info];
newPhotoMsg.state = kStateDownloading;

self.photoDownloadTask = [[BGSessionManager sharedManager] downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
    NSURL *filePath = // some file url
    return filePath;
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
    if (!error) {
        // update the PhotoMessage Object
        newPhotoMsg.state = kStateDownloadFinished;
        newPhotoMsg.resourcePath = filePath;
    }
}];

[self.photoDownloadTask resume];   

Jak widać, używam bloku uzupełniania, aby go zaktualizowaćPhotoMessage obiekt zgodnie z odpowiedzią, jaką otrzymuję.

Jak mogę to osiągnąć dzięki transferowi w tle? Ten blok zakończenia nie zostanie wywołany, w wyniku czego nie mogę zaktualizowaćnewPhotoMsg.

questionAnswers(3)

yourAnswerToTheQuestion