Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在应用程序重新启动后监视NSURLSession_Ios_Nsurlsession_Nsurlsessiondownloadtask - Fatal编程技术网

Ios 在应用程序重新启动后监视NSURLSession

Ios 在应用程序重新启动后监视NSURLSession,ios,nsurlsession,nsurlsessiondownloadtask,Ios,Nsurlsession,Nsurlsessiondownloadtask,我有一个原型单视图应用程序,可以监控下载任务 我正在尝试处理以下用例: 当应用程序位于前台时,通过NSURLSession启动下载。NSURLSession是使用后台配置创建的 我用“Xcode停止”终止应用程序,这样应用程序可以在后台继续下载。当应用程序处于活动状态时,我有序地接收来自NSURLSession的进度回调 当下载尚未完成时,我手动启动应用程序(不是通过Xcode,而是点击启动图标) 我没有收到任何URLSession委托调用,用于在前一个应用生命周期中启动的任务。唯一被调用的是

我有一个原型单视图应用程序,可以监控下载任务

我正在尝试处理以下用例:

  • 当应用程序位于前台时,通过NSURLSession启动下载。NSURLSession是使用后台配置创建的
  • 我用“Xcode停止”终止应用程序,这样应用程序可以在后台继续下载。当应用程序处于活动状态时,我有序地接收来自NSURLSession的进度回调
  • 当下载尚未完成时,我手动启动应用程序(不是通过Xcode,而是点击启动图标)
  • 我没有收到任何URLSession委托调用,用于在前一个应用生命周期中启动的任务。唯一被调用的是handleEventsForBackgroundURLSession,但它是由操作系统在AppDelegate上调用的(与NSURLSession委托调用的情况不同)
  • 我想显示正在进行的下载任务的进度。在重新启动应用程序后(当系统终止应用程序时,而不是手动终止应用程序时),是否可以执行此操作

    在应用程序重新启动后,NSURLSession使用相同的标识符(新的委托对象)初始化,所以我认为委托将继续接收会话任务的调用(因为会话标识符是相同的),但显然情况并非如此。 苹果的文档中有一条注释:

    会话对象保留对委托的强引用,直到应用程序显式使会话无效。如果不使会话无效,则应用程序会泄漏内存


    但我想这只适用于应用程序处于活动状态的情况。当应用程序终止时,所有应用程序的对象都将消失。

    您的目标似乎在第4位,在后台尝试接收URLSession委托回调。我自己也一直在努力解决这个问题,并没有找到一个很好的解决方案,但我确实意识到,每当我在handleEventsForBackgroundURLSession中执行任何操作(甚至只是调用completionHandler()回调)时,我都会接到一个调用

    - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
    didCompleteWithError:(NSError *)error {
    
    似乎执行操作可能会唤醒创建NSURLSession时指定的委托

    这是执行任何UI更新(例如显示进度)的正确方法,因为这是后台任务完成的唯一位置。只需确保在完成后调用完成处理程序回调


    这也可能对您有所帮助:

    确保应用程序启动时正确初始化了
    nsursession
    。这就是我的问题所在。我有TransferManager,它将会话初始化为lazy getter,但没有被调用

    既然
    NSURLSession
    已正确初始化,回调将定期启动


    愚蠢的错误,但就是这样。

    我在后台接收回调时没有问题。问题是,我无法在应用程序重启后获得进度更新回调(应用程序可能会因内存压力而被iOS杀死或崩溃;无论哪种方式,iOS都将继续后台下载会话)。因此,如果用户重新启动应用程序,我无法在进度视图上为他更新进度条。嘿,在这个
    BG传输演示中,
    ,你在从后台删除应用程序后恢复下载???如果应用程序是手动(由用户)从后台删除的,我不会恢复下载。当这种情况发生时,iOS可能会取消URL会话。应用程序重新启动后,您可以手动检查持久任务的状态并执行正确的操作。如果您愿意,我可以向您发送“BG传输演示”或上传到某个存储库供您结帐。是的,请使用我的gmail id向我发送演示。
    patelmonika006@gmail.com
    &
    patelmonika0612@gmail.com
    提前感谢。