Ros*_*nko 15 networking objective-c ios nsurlsession
我正在使用一个NSURLSession对象在我的应用程序中加载图像.这可能是同时加载几个图像.
在某些时刻,我需要取消加载一个特定图像并继续加载其他图像.
你能建议正确的方法吗?
Avt*_*Avt 29
要获取任务列表,您可以使用NSURLSession的方法
- (void)getTasksWithCompletionHandler:(void (^)(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks))completionHandler;
Run Code Online (Sandbox Code Playgroud)
在会话中异步调用包含所有未完成数据,上载和下载任务的完成回调.
然后检查task.originalRequest.URL返回的任务以找到要取消的任务.
小智 6
希望下面的代码帮助.
-(IBAction)cancelUpload:(id)sender {
if (_uploadTask.state == NSURLSessionTaskStateRunning) {
[_uploadTask cancel];
}
}
Run Code Online (Sandbox Code Playgroud)
根据下面的所有答案,我会选择这样的:
斯威夫特 5
func cancelTaskWithUrl(_ url: URL) {
URLSession.shared.getAllTasks { tasks in
tasks
.filter { $0.state == .running }
.filter { $0.originalRequest?.url == url }.first?
.cancel()
}
}
Run Code Online (Sandbox Code Playgroud)
您可能还想考虑您的任务完成处理程序,因为取消任务将导致Error该完成处理程序。
@Avt的答案的Swift 3.0版本以获取任务列表。使用getTasksWithCompletionHandler。
func getTasksWithCompletionHandler(_ completionHandler: @escaping ([URLSessionDataTask],
[URLSessionUploadTask],
[URLSessionDownloadTask]) -> Void) {
}
Run Code Online (Sandbox Code Playgroud)
返回的数组包含您在会话中创建的所有任务,不包括在完成,失败或取消后已失效的任何任务。
我建议两种方法:
NSURLSessionTask数组中。如果您不知道具体会获得多少张图像。尽管您必须知道会话索引才能取消它。NSURLSessionTask全局变量,这样您就可以在类中的任何位置取消它。