iOS - 后台传输任务不匹配



我正试图通过后台获取调用将我的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

我想我已经在某个地方读到,由于后台任务的原因,输出不必是线性的。但由于标识符不同,我无法将输出与任务相匹配,也无法在后台任务完成后正确处理后台任务。

有人知道是什么导致了这种行为吗?或者我可以尝试什么?

这似乎是一个模拟器问题。在实际设备上测试时,任务标识符在didcomplete回调中匹配,可以正确处理请求。

最新更新