我有一个原型单视图应用程序,可以监控下载任务。
我试图处理以下用例:
我想显示正在进行的下载任务的进度。这可以在应用程序重新启动后完成(当应用程序被系统终止时,而不是手动终止!)?
在重新启动应用程序之后,NSURLSession会使用相同的标识符,新的委托对象进行初始化,因此我认为委托将继续接收会话任务的调用(因为会话标识符是相同的),但显然是这样的不是这样的。 Apple的文档中有一个注释:
会话对象保留对委托的强引用,直到您的应用显式使会话无效。如果您没有使会话无效,您的应用程序会泄漏内存。
但我想这只适用于app活着的情况。当应用程序终止时,所有应用程序的对象都将消失。
答案 0 :(得分:1)
确保在应用启动时正确初始化NSURLSession
。这就是我的问题所在。我有TransferManager初始化会话作为懒惰的getter,没有被调用...
现在NSURLSession
已正确初始化,定期触发回调。
愚蠢的错误,但确实存在。
答案 1 :(得分:0)
你的目标似乎在4号,试图在后台接收URLSession委托回调。我一直在努力解决这个问题并且无法找到一个出色的解决方案,但是每当我执行任何操作时(甚至只是调用 completionHandler()回调)我都会意识到这一点在 handleEventsForBackgroundURLSession:我收到了对
的调用- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error {
似乎执行操作可能会唤醒创建NSURLSession时指定的委托。
这是执行任何UI更新(例如显示进度)的正确方法,因为这是您知道后台任务完成的唯一位置。完成后,确保调用完成处理程序回调!
这也可能对您有所帮助:My NSURLSessionDelegate methods are not getting called during a background download