gpt4 book ai didi

ios - 在已失效的 session 中创建的任务

转载 作者:行者123 更新时间:2023-12-01 15:49:11 25 4
gpt4 key购买 nike

我在 crashlytics 上遇到以下崩溃,我无法在我的设备上重现

Fatal Exception: NSGenericException
Task created in a session that has been invalidated

在以下行
NSURLSessionTask *task = [self.session uploadTaskWithRequest:request fromFile:filePathURL];
[task resume];
[self.session finishTasksAndInvalidate];

我在委托(delegate)方法中处理了 session 失效
- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error {
// Crashlytics logging
[CrashlyticsKit setBoolValue:true forKey:@"URLSession_didBecomeInvalid"];
self.session = [self createNewSession];
}

- (NSURLSession *)CreateSession {
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:SERVER_URL];

if (@available(iOS 11.0, *)) {
sessionConfig.waitsForConnectivity = YES;
}
return [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
}

上传新版本后,我仍然遇到同样的崩溃,并且在“ didBecomeInvalidWithError”处完全没有 Crashlytics 日志!

知道如何解决这个崩溃吗?

最佳答案

如果您使 session 无效,您将永远无法再次使用它。如果您尝试使用以前无效的 session ,您将收到与我们分享的错误。

这让您有两个选择:

  • 如果您必须使 session 无效,我建议您设置 session引用 nil所以你不能不小心再次使用它。如果您稍后必须执行另一个请求,您将实例化一个新的 session 对象。
  • 如果您可能需要再次使用 session ,您可以简单地避免使其无效。保留单个 session 对象对内存的影响在很大程度上是无关紧要的。如果您要创建许多 session ,这才是真正的问题。

  • 坦率地说,后台 session 非常复杂,以至于我需要一个非常有说服力的案例来处理多个 session (例如,每个 session 都有自己的完成处理程序传递给我的应用程序委托(delegate))。如果可能的话,我会倾向于单一的后台 session 模式。

    关于ios - 在已失效的 session 中创建的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60636329/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com