Otrzymywałem raporty o błędach, że moja aplikacja iOS nie mogła przesłać obrazów na wolnych połączeniach. Chociaż mój limit czasu prawdopodobnie nie był wystarczająco wysoki, pojawił się kolejny problem.NSURLSession, zadanie przesyłania - Uzyskaj rzeczywiste bajty przesłane
Zauważyłem, że postęp przesyłania szybko osiągnął 100%, mimo że widziałem w Charlesu, że bajty nadal były przesyłane. Używam następujący sposób NSURLSession:
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request
fromData:(NSData *)bodyData
completionHandler:(void (^)(NSData *data,
NSURLResponse *response,
NSError *error))completionHandler
i wdrożyć następujące metody delegata do odbierania zdarzeń progress:
- (void)URLSession:(NSURLSession *)session
task:(NSURLSessionTask *)task
didSendBodyData:(int64_t)bytesSent
totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
Właściwie używam AFNetworking 2.5.2, który korzysta z tej metody. Moja teoria mówi, że ta metoda delegatów raportuje bajty wysłane z telefonu, a NIE faktyczne przesłane bajty.
Wysłanie 300kb przy bardzo niskim połączeniu spowoduje natychmiastowe wysłanie 5-6 paczek i zgłoszenie postępów w wysokości 100% podczas oczekiwania na ich odebranie.
Czy można uzyskać informacje o postępie w faktycznej liczbie przesłanych bajtów?
Zakładam, że 'operacja' jest' AFHTTPRequestOperation'. Ma to tę samą "wadę", jak obawiam się powyżej, stosując sesję. –
Jeśli wykonujesz operację przesyłania w prawidłowy sposób, nie powinno to powodować żadnych problemów. Przesłałem 30 zdjęć za pomocą tej samej operacji, a także śledziłem postępy opisane w odpowiedzi. Upewnij się, że używasz "wieloczęściowy". – Vizllx
Czy próbowałeś użyć aplikacji proxy, takiej jak Charles, aby zmniejszyć prędkość wysyłania do np. 30 kpbs? Wtedy postęp zaczyna działać dziwnie, jak opisano w powyższym numerze –