有没有办法从我的任务是在委托上创建的上下文中检索任何数据?
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
我正在创建一个任务以在函数内的后台下载图像,并且我在同一上下文中有一个 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