2015-05-29 16 views
5

Tôi đã nhận được báo cáo lỗi rằng ứng dụng iOS của tôi không thể tải hình ảnh lên các kết nối chậm. Trong khi thời gian chờ của tôi có thể không đủ cao, có một vấn đề khác.NSURLSession, tải lên tác vụ - Nhận byte thực tế được chuyển

Tôi nhận thấy rằng tiến trình tải lên nhanh chóng đạt đến 100% mặc dù tôi có thể thấy ở Charles rằng các byte vẫn đang được chuyển. Tôi sử dụng phương pháp sau đây của NSURLSession:

- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request 
            fromData:(NSData *)bodyData 
          completionHandler:(void (^)(NSData *data, 
                 NSURLResponse *response, 
                 NSError *error))completionHandler 

và thực hiện các phương pháp đại biểu sau đây để nhận các sự kiện tiến bộ:

- (void)URLSession:(NSURLSession *)session 
       task:(NSURLSessionTask *)task 
    didSendBodyData:(int64_t)bytesSent 
    totalBytesSent:(int64_t)totalBytesSent 
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend 

Thật sự tôi đang sử dụng AFNetworking 2.5.2, trong đó sử dụng phương pháp này. Lý thuyết của tôi là phương thức ủy nhiệm này báo cáo về các byte được gửi từ điện thoại và không thực sự chuyển byte.

Gửi 300kb với kết nối rất thấp sẽ gửi ngay 5-6 gói và báo cáo tiến độ 100% trong khi đợi chúng được nhận.

Có thể nhận sự kiện tiến độ về số byte thực tế đã được xác nhận chuyển không?

Trả lời

1

Có điều này là có thể!

[operation setUploadProgressBlock:^(NSInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { 
    float prog = (totalBytesWritten/(totalBytesExpectedToWrite * 1.0f) * 100); 
    [self.progBar setProgress:prog]; 
    NSLog(@"%f%% Uploaded", (totalBytesWritten/(totalBytesExpectedToWrite * 1.0f) * 100)); 

    }]; 
+0

Tôi giả sử 'thao tác' là' AFHTTPRequestOperation'. Điều này có cùng "lỗi" như cách tiếp cận trên bằng cách sử dụng một phiên, tôi sợ. –

+0

Nếu bạn đang thực hiện thao tác tải lên theo cách chính xác, thì nó sẽ không tạo ra bất kỳ vấn đề nào. Tôi đã tải lên 30 hình ảnh bằng cách sử dụng cùng một thao tác cũng theo dõi tiến độ như được đề cập trong câu trả lời. Đảm bảo bạn đang sử dụng "multipart". – Vizllx

+0

Bạn đã thử sử dụng ứng dụng proxy như Charles để điều chỉnh tốc độ tải lên, ví dụ: 30 kpbs? Đây là khi tiến trình bắt đầu hoạt động kỳ lạ như được mô tả trong vấn đề ở trên –

Các vấn đề liên quan