我有一個應用程序上傳TSPhoto對象數組中保存的幾張圖片。NSURLSessionUploadTask「完成」,但沒有網絡流量
當我開始上傳,委託方法最終觸發說,它的完成,但應用始終命中服務器和工具沒有顯示任何網絡流量:
_session = [self backgroundSession];
for(TSPhoto *photo in _picsetPhotos) {
NSURL *uploadURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@upload", @"https://example.com/"]];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:uploadURL];
[req setHTTPMethod:@"POST"];
NSLog(@"req dump: %@", req);
// Add it to the queue
NSURLSessionUploadTask *uploadTask = [_session uploadTaskWithRequest:req fromFile:[NSURL fileURLWithPath:photo.fullImagePath]];
// "Start" it
NSLog(@"Enqueueing %@", uploadTask);
[uploadTask resume];
NSLog(@"Post-resume");
}
-backgroundSession:
-(NSURLSession *)backgroundSession {
static NSURLSession *session = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"TSBackgroundUploader"];
configuration.HTTPMaximumConnectionsPerHost = 1;
session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
});
return session;
}
我已經實現了所有的適當的委託方法:
-(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session {
NSLog(@"Finished all uploads!");
[[[UIAlertView alloc] initWithTitle:@"Upload Completed" message:@"Your album has been created." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
}
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend {
dispatch_async(dispatch_get_main_queue(), ^{
[_uploadProgress setProgress:
(double)totalBytesSent/
(double)totalBytesExpectedToSend animated:YES];
});
}
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
[_uploadProgress setProgress:0.5];
// Did we succeed?
if(!error) {
NSLog(@"Upload done");
} else {
NSLog(@"%@", error.description);
}
});
進度條也起到真的靠不住的過程中這一切,上升和下降,直至最終達到100
任何線索可能什麼呢?
編輯: 以下是我添加了一些NSLog
報表後的日誌。這些任務以與它們開始相反的順序呼叫代表:
2015-05-04 09:55:42.492 TS[348:95052] Starting background upload
2015-05-04 09:55:42.493 TS[348:95052] req dump: <NSMutableURLRequest: 0x1740138b0> { URL: https://example.com/upload }
2015-05-04 09:55:42.512 TS[348:95052] Enqueueing <__NSCFBackgroundUploadTask: 0x155d804c0>{ taskIdentifier: 3 }
2015-05-04 09:55:42.513 TS[348:95052] Post-resume
2015-05-04 09:55:42.513 TS[348:95052] req dump: <NSMutableURLRequest: 0x17400de00> { URL: https://example.com/upload }
2015-05-04 09:55:42.524 TS[348:95052] Enqueueing <__NSCFBackgroundUploadTask: 0x155e68db0>{ taskIdentifier: 4 }
2015-05-04 09:55:42.525 TS[348:95052] Post-resume
2015-05-04 09:56:01.726 TS[348:95052] ID: 4
2015-05-04 09:56:01.726 TS[348:95052] Upload done
2015-05-04 09:56:02.920 TS[348:95052] ID: 3
2015-05-04 09:56:02.920 TS[348:95052] Upload done
究竟日誌包含什麼,以及哪些任務調用委託回來? – Wain
@Wain:編輯添加日誌。 – Timothy
你如何測試服務器端的數據?你使用VPN嗎?你試過跟查爾斯追蹤過嗎?當您將每個任務更新爲100%時,進度非常混亂,然後當每個任務完成時重置爲50%。 – Wain