我已经从网址下载了信息,我将这个网址作为NSOperation在NSOperationQueue中发送,我想知道,我如何删除特定的NSOperation以下载特定网址的数据,现在我这样做了:
AppDelegate *appController = (AppDelegate *) [[UIApplication sharedApplication] delegate];
for (NSOperation *op in appController.seriesQueue.operations) {
if ([op isKindOfClass:[MyDowndload class]]) {
MyDownload *urlInDownload = (MyDowndload *)op;
if ([urlInDownload.myNew.urlName isEqualToString:[managedObject valueForKey:@"urlName"]] && [urlInDownload.myNew.language isEqualToString:[managedObject valueForKey:@"language"]]) {
[op cancel];
}
}
}
我在tableview中有信息,所以当我删除索引路径的行时,我输入此检查,并输入[op cancel]行,但我可以在控制台日志中看到该线程仍然是下载,如何停止并删除它?
答案 0 :(得分:8)
根据苹果指南,取消手术不会立即迫使它停止它正在做的事情。虽然所有操作都需要遵守isCancelled返回的值,但是您的代码必须显式检查此方法返回的值并根据需要中止。
作为Justin建议的例子......这是根据需要中止执行方法的方式。
- (void)main
{ \\ ...do work...
if (self.isCancelled)
{ \\ ...get out... }
}
答案 1 :(得分:0)
要停止下载请求操作,您需要终止/停止该请求的runloop。
要在操作队列中找到特定的操作,我认为上面的操作是允许的简单操作。
如果您需要更多控制权,
创建nsoperation的子类并为每个操作使用tag,以便通过使用唯一标记进行检查来快速找到特定操作。
并在操作的子类中放置一个自定义KVO,以便在需要时立即安静操作。 我的意思是覆盖该线程的start方法。
感谢,
Naveen Shan