Obecnie jestem w trakcie projektowania systemu do przesyłania wielu obrazów na serwer z aplikacji. Pliki będą przechowywane na urządzeniu lokalnym, a obecny pomysł polega na podzieleniu ich na porcje, a następnie przesłaniu ich po kawałku na serwer, czekając na komunikat o powrocie z powodzeniem przed przesłaniem następnego.iOS 7 - Przesyłanie danych do NSURLSession
Proces ten powinien przebiegać bezproblemowo dla użytkownika, należy nacisnąć przycisk, aby przesłać wszystkie obrazy, a następnie móc zamknąć aplikację i kontynuować ją w tle. Dzięki iOS 7 widziałem, że możesz przesyłać swoje pliki do nowego interfejsu API NSURLSession i mieć do czynienia z zadaniem przesyłania niezależnie od aplikacji.
Zastanawiałem się, czy ktoś wie, jak wiarygodny jest ten transfer. Jeśli przekażę mu cały obraz, co się stanie, jeśli połączenie internetowe spadnie w połowie? Czy usługa przenoszenia w tle może się ponowić w późniejszym czasie? Chodzi o to, że możemy przesłać obraz, a jeśli w połowie go nie uda, możemy po prostu kontynuować od tego momentu, gdy połączenie zostanie wznowione.
Jednym z pomysłów było podzielenie plików na porcje, a następnie przekazanie wszystkich porcji jako oddzielnych NSURLSessionUploadTasks i założenie, że ostatecznie wszystkie zostaną wysłane na serwer.
Innym było wysłać pierwszy klocek, używając:
uploadTaskWithRequest:fromData:completionHandler:
a następnie w completitionHandler aby następnie wysłać następny kawałek. Mój problem polega na tym, że jeśli w tle następny kawałek będzie miał swoją
@property BOOL discretionary = true
co oznacza, że będzie wysyłać tylko przez WiFi, gdy podłączony. Muszę to do pracy nad wszystkimi sieciami i być w stanie poradzić sobie z zakłócenia.
Nie chcę żadnego kodu, tylko porady, jeśli jest to właściwy sposób, aby osiągnąć ten cel.
jeśli używam delegata, gdy poprzednie zdjęcie zostanie przesłane, w jego delegacji oddzwaniania, mogę kolejkować następne zadanie przesyłania zdjęć. czy to jest poprawne? -taki –
Masz rację, możesz to zrobić. –
@EbenbenMo Należy jednak zachować ostrożność, Jeśli transfer w tle zostanie zainicjowany, gdy aplikacja jest w tle, właściwość uznaniowa obiektu konfiguracyjnego jest traktowana jako prawdziwa. Po ustawieniu tej flagi transfery będą częściej występować po podłączeniu do zasilania i Wi-Fi. Ta wartość jest domyślnie fałszywa. Jeśli zadanie jest uruchamiane, gdy aplikacja jest w tle, zadanie to jest traktowane tak, jakby uznanie było prawdziwe, niezależnie od faktycznej wartości tej właściwości. W związku z tym kolejne przesyłanie może się zdarzyć dopiero po podłączeniu do WiFi i podłączeniu. –