对于如何利用新的iOS 7 NSURLSession后台传输功能和AFNetworking(版本2和3),我有些困惑。
我看到了WWDC 705 - What’s New in Foundation Networking会话,他们演示了后台下载,该下载在应用终止甚至崩溃后仍然继续。
这是使用新的API application:handleEventsForBackgroundURLSession:completionHandler:以及会话的委托人最终将获得回调并可以完成其任务的事实来完成的。
因此,我想知道如何将其与AFNetworking一起使用(如果可能)以继续在后台下载。
问题是,AFNetworking方便地使用基于块的API来执行所有请求,但是如果应用终止或崩溃,这些块也将消失。那么我该如何完成任务呢?
也许我在这里想念什么...
让我解释一下我的意思:
例如,我的应用程序是一个照片消息传递应用程序,可以说我有一个PhotoMessage代表一条消息的对象,并且该对象具有诸如
state -描述照片下载的状态。
resourcePath -最终下载的照片文件的路径。
因此,当我从服务器收到新消息时,我创建了一个新PhotoMessage对象,并开始下载其照片资源。
PhotoMessage *newPhotoMsg = [[PhotoMessage alloc] initWithInfoFromServer:info];
newPhotoMsg.state = kStateDownloading;
self.photoDownloadTask = [[BGSessionManager sharedManager] downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSURL *filePath = // some file url
return filePath;
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
if (!error) {
// update the PhotoMessage Object
newPhotoMsg.state = kStateDownloadFinished;
newPhotoMsg.resourcePath = filePath;
}
}];
[self.photoDownloadTask resume];
如您所见,我根据完成PhotoMessage的响应使用完成块来更新该对象。
我该如何通过后台传输来实现?此完成程序块将不会被调用,因此,我无法更新newPhotoMsg。
慕码人8056858
宝慕林4294392
狐的传说