从NSOperationQueue取消NSOperation

Pie*_*ero 1 iphone nsoperation nsoperationqueue nsmanagedobject ios

我已经从网址下载了信息,我将这个网址作为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];
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在tableview中有信息,所以当我为索引路径删除一行时,我输入此检查,并在[op cancel]行中输入,但我可以在控制台日志中看到该线程仍在下载,如何我能停下来删除吗?

Nit*_*Nit 8

根据苹果指南,取消手术不会立即迫使它停止它正在做的事情.虽然期望所有操作都遵循isCancelled返回的值,但是您的代码必须显式检查此方法返回的值并根据需要中止.

作为Justin建议的示例....这是根据需要中止执行方法的方法.

- (void)main
 { \\ ...do work... 
   if (self.isCancelled)
      { \\ ...get out...  } 
 } 
Run Code Online (Sandbox Code Playgroud)

苹果的NSOperation类参考