根据Apple的建议,我的应用程序下载每个文件后,我对NSURLSession
使用finishandinvalidate方法。
然后应用程序必须下载新的更新文件,但我无法创建新 session 。
创建 session 的方法是这样的:
- (NSURLSession *)backgroundSession
{
NSString* sessionIdentifier=@"com.liuk.pf";
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:sessionIdentifier];
static NSURLSession *session = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
session = [NSURLSession sessionWithConfiguration:configuration
delegate:self delegateQueue:nil];
});
return session;
}
最佳答案
我解决了我的问题。 我使用了 Apple 建议的这段代码:
- (NSURLSession *)backgroundSession
{
/*
Using disptach_once here ensures that multiple background sessions with the same identifier are not created in this instance of the application. If you want to support multiple background sessions within a single process, you should create each session with its own identifier.
*/
static NSURLSession *session = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.example.apple-samplecode.SimpleBackgroundTransfer.BackgroundSession"];
session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
});
return session;
}
然后我的 nsurlsession 是静态的并且仅创建一次。
现在我在 nsobject 的 init 方法中创建 nsurlsession
self = [super init];
if (self) {
NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.my.myapp"];
_session= [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
}
return self
关于ios - 如何创建新的 NSUrlSession(第一个 session 失效后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31606303/