1

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

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

任何人都知道什么可能导致这种行为?或者我可以尝试什么?

4

1 回答 1

0

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

于 2014-01-13T10:18:13.070 回答