我有一个推送viewController的TableView。此viewController在单独的进程中创建要下载的NSURLSession
。但是,如果用户在进程完成之前重新进入viewController,我是否可以检测会话是否存在?
NSString *name= [NSString stringWithString:[self.myObject objectForKey:@"title"]];
self.conf = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:name];
self.backgroundDownloadSession = [NSURLSession sessionWithConfiguration:self.conf
delegate:self
delegateQueue:self.delegateQueue
答案 0 :(得分:0)
你试过这个吗?
if (!self.backgroundDownloadSession) {
// ...
}
如果您建议您也在重新创建self
,那么请考虑让您的NSURLSession
由另一个持续更长时间(或使其保持静止)的对象拥有。
答案 1 :(得分:0)
您始终可以检查self.backgroundDownloadSession
是否为零,
但是如果你想确保它仍在进行中,即使你的控制器不活着,
我会把它变成singelton类的属性,而不是self.backgroundDownloadSession
类似于:[AppManager sharedInstance].backgroundDownloadSession
当AppManager是单身人士时。
答案 2 :(得分:0)
正如其他人所指出的,典型的答案是单例或静态变量(例如,使用dispatch_once
模式)或某些类的某些属性,您知道它们只被实例化一次(例如您的应用委托)。这个过程只是“如果我还没有实例化会话,那么这样做;如果我已经实例化它,那么请引用该现有实例”。
话虽如此,值得注意的是,在NSURLSession
的情况下,您不仅要在视图控制器中提交新请求时处理此过程,还要在您响应{app'的应用委托中处理此过程{1}}(例如,您捕获您调用的完成处理程序的位置,例如,在handleEventsForBackgroundURLSession
中)。