有没有办法从我的任务是在委托上创建的上下文中检索任何数据?

Is there a way to retrieve any data from the context my task was created on a delegate?

我正在创建一个任务以在函数内的后台下载图像,并且我在同一上下文中有一个 notification 对象。我想在调用委托 didFinishDownloadingToURL 时检索此 notification 对象。有什么办法可以做到这一点吗?

我创建了一个这样的任务:

NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"imageDownloadSession"];
[sessionConfig setDiscretionary:YES];
[sessionConfig setSessionSendsLaunchEvents:YES];

NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];

NSURLSessionDownloadTask *getImageTask = [session downloadTaskWithURL:notification.imageRemoteURL];

这是我的代表:

-(void)URLSession:(NSURLSession *)session
       downloadTask:(NSURLSessionDownloadTask *)downloadTask
       didFinishDownloadingToURL:(NSURL *)location {

    // I want to access the notification object here

}

您可以简单地将通知存储在您用作 NSURLSessionDownloadDelegate 的 class 中的 属性 中。因此,当调用 downloadTaskWithURL 时,您可以访问 属性。 或者,您可以创建另一个 class 将通知保存为实例 属性 并充当委托。如果您有多个下载任务,您可以将它们保存在一个数组中。

例如:

...
self.downloadDelegate = [[SessionDownloadDelegate alloc] init];
downloadDelegate.notification = notification

//Now use the downloadDelegate instead of self
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:downloadDelegate delegateQueue:nil];
...

@interface SessionDownloadDelegate: NSObject<NSURLSessionDownloadDelegate>
    @property (strong, nonatomic) NSObject *notification;
@end

@implementation SessionDownloadDelegate
- (void)URLSession:(nonnull NSURLSession *)session downloadTask:(nonnull NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(nonnull NSURL *)location {
//    access the notification object
//    self.notification
}
@end