1

我已经从一个 url 下载了信息,并且我将这个 url 作为 NSOperation 发送到一个 NSOperationQueue 中,我想知道,我如何删除一个特定的 NSOperation 来下载特定 url 的数据,现在我正在这样做:

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];
            }
        }
    }

我在表格视图中有信息,所以当我删除索引路径的行时,我在此检查中输入,并在 [op cancel] 行中输入,但我可以在控制台日志中看到线程仍在下载,如何我可以停止并删除它吗?

4

2 回答 2

8

根据苹果指南,取消操作不会立即强制它停止正在执行的操作。尽管所有操作都需要遵守 isCancelled 返回的值,但您的代码必须显式检查此方法返回的值并根据需要中止。

贾斯汀建议的示例......这是根据需要中止执行方法的方式。

- (void)main
 { \\ ...do work... 
   if (self.isCancelled)
      { \\ ...get out...  } 
 } 

苹果的 NSOperation 类参考

于 2012-04-25T10:35:20.277 回答
0

要停止下载请求操作,您需要终止/停止该请求的运行循环。

要在操作队列中查找特定操作,我认为上述操作是允许的简单操作。

如果您需要更多控制,

创建 nsoperation 的子类并为每个操作使用标签,以便您可以通过检查唯一标签快速找到特定操作。

并在操作的子类中放置一个自定义 KVO,以便在需要时立即停止操作。我的意思是覆盖该线程的启动方法。

谢谢,

纳文山

于 2012-04-25T10:32:33.733 回答