iOS - 后台传输任务不匹配

时间:2013-12-31 13:15:14

标签: ios nsurlsession

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

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

任何人都知道可能导致此行为的原因是什么?或者我可以尝试什么?

1 个答案:

答案 0 :(得分:0)

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