我正在尝试通过后台获取调用将我的 iOS 照片从相机胶卷上传到外部服务器。为了适应这一点,我在后台遍历 ALAssetsLibrary 以查找新照片。当找到新照片或所有照片(如果是新设备)时,我会为该照片启动后台传输。我的计划是启动一个 NSURLSession 并在每次获取时添加一些任务。
这行得通。文件被上传。但是回调不一致。在模拟了很多后台获取之后,一百分之一的 didCompleteWithError 回调没有被触发。但最大的问题是任务很多时候都不匹配。当我在创建单个任务后检查任务标识符时:
NSURL *theURL = [NSURL fileURLWithPath:fullFileName isDirectory:NO];
NSURLSessionUploadTask *uploadTask = [_session uploadTaskWithRequest:request fromFile:theURL];
NSLog(@"Task id at start: %d", [uploadTask taskIdentifier]);
在回调中:
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
NSLog(@"Didcomplete - task_id: %d", [task taskIdentifier]);
...
我的输出是:
2013-12-31 14:02:36.628 Project[18685:1303] Didcomplete - task_id: 30
2013-12-31 14:02:36.768 Project[18685:70b] Task id at start: 31
我想我已经在某处读到,由于后台任务,输出不必是线性的。但是由于标识符不同,我无法将输出与任务匹配并在完成后正确处理后台任务。
任何人都知道什么可能导致这种行为?或者我可以尝试什么?