如何检测NSUrlSession是否存在iOS

时间:2014-10-24 13:05:57

标签: ios nsurlsession

我有一个推送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

3 个答案:

答案 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中)。