取消NSOperation从NSOperationQueue
我已经从网址下载信息,我发送这个网址作为NSOperation在一个NSOperationQueue,我想知道,我如何删除特定的NSOperation下载数据为一个特定的网址,现在我做了这种方式:取消NSOperation从NSOperationQueue
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取消]行,但我可以看到在线程仍在下载的控制台日志中,如何停止并删除它?
据苹果方针,取消操作不会立即强制停止它在做什么。虽然尊重由isCancelled返回的值是所有操作的预期,但您的代码必须显式检查此方法返回的值并根据需要中止。
Justin建议建议....这是根据需要中止执行方法的方法。
- (void)main
{ \\ ...do work...
if (self.isCancelled)
{ \\ ...get out... }
}
要停止下载请求操作,您需要终止/停止该请求的runloop。
要找到操作队列中的特定操作,我认为上述操作是允许的简单操作。
,如果你需要更多的控制,
创建的NSOperation和使用标签的每个操作一个子类,这样就可以通过独特的标签检查快速查找特定的操作。
并将自定义KVO放入操作的子类中,以便在需要时立即清除操作。 我的意思是覆盖该线程的启动方法。
感谢,
纳文珊
我已经子类化了nsoperation,MyDownload类是NSOperation的子类,并且所有的工作权利,当我尝试取消它时,我在if语句中输入,并执行[op取消];但不工作...并且url名称是我用于标记的nsoperation子类的属性... – Piero 2012-04-25 10:35:55
整数检查比字符串比较更快。只需重写取消方法并尝试停止runloop。 – 2012-04-25 10:51:21
使用这个KVO,[self willChangeValueForKey:@“isCancelled”]; _isCancelled = YES; [self didChangeValueForKey:@“isCancelled”]; – 2012-04-25 10:53:27
'url.myNew.language'在如果条件。这样对吗?或'urlInDownload.myNew.language'? – Ilanchezhian 2012-04-25 10:24:38
我正确的,这只是一个错误粘贴在这里,但在我的代码我写对了......你知道我可以解决这个问题吗? – Piero 2012-04-25 10:26:36