我在测试中看到错误,偶尔会收到以下iOS错误:

标识符为{GUID}的后台URLSession已经存在!

即使我在每次测试后在清理调用中在NSURLSession上调用invalidateAndCancel。我正在寻找一种等待直到我确定NSURLSession对象已失效的方法,然后再进行下一个测试。

最佳答案

创建NSURLSession对象时,请使用sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(id <NSURLSessionDelegate>)delegate delegateQueue:(NSOperationQueue *)queue;方法并将自己指定为委托(delegate)。

当 session 无效时,您将在- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error;中获得一个回调。

您不能相信invalidateAndCancel会立即停止所有任务,因为这取决于处理取消调用的任务。

NSURLSession的标题中:

/* -invalidateAndCancel acts as -finishTasksAndInvalidate, but issues
* -cancel to all outstanding tasks for this session.  Note task
* cancellation is subject to the state of the task, and some tasks may
* have already have completed at the time they are sent -cancel.
*/

关于ios - 您如何知道iOS何时使NSURLSession对象无效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21414823/

10-12 05:41