ios - 如何创建新的 NSUrlSession(第一个 session 失效后)

标签 ios nsurlsession invalidation

根据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/

相关文章:

session - Silex SessionLogoutHandler

ios - 如何从服务器中删除 JSON 形式的食谱?

ios - SIGABRT :Upload tasks from NSData are not supported in background sessions

android - 调用 'onDraw()'时方法 'invalidate'会被调用两次

iphone - 插入时间范围 :ofTracks:atTime:error:

swift - WatchKit 检索多个 URL 图像

android - 从 onDraw() 调用 invalidate() 会导致堆栈溢出吗?

iphone - 在 UITextField 中添加 TagList 类似于原生 IOS Message App

iphone - 在 Xcode 中有条件地链接第三方 API

ios - 如何可靠地关闭 ViewController,即使是动画