2012-04-25 63 views
1

我已经从网址下载信息,我发送这个网址作为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取消]行,但我可以看到在线程仍在下载的控制台日志中,如何停止并删除它?

+0

'url.myNew.language'在如果条件。这样对吗?或'urlInDownload.myNew.language'? – Ilanchezhian 2012-04-25 10:24:38

+0

我正确的,这只是一个错误粘贴在这里,但在我的代码我写对了......你知道我可以解决这个问题吗? – Piero 2012-04-25 10:26:36

回答

8

据苹果方针,取消操作不会立即强制停止它在做什么。虽然尊重由isCancelled返回的值是所有操作的预期,但您的代码必须显式检查此方法返回的值并根据需要中止。

Justin建议建议....这是根据需要中止执行方法的方法。

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

NSOperation Class Reference by apple

+1

+1一个简单的例子会很有用:MONOperation - ' - (void)main {\ n ...做工... \ n if(self.isCancelled){\ n ... get out ... \ n} \ n ... \ n} \ n'。 – justin 2012-04-25 10:44:59

+0

谢谢,我把一些self.isCancelled国旗在NSOperation检查下载一段时间,现在工作:) – Piero 2012-04-25 10:58:50

+0

有一种方法可以暂停队列中的所有操作? – Piero 2012-04-25 10:59:51

0

要停止下载请求操作,您需要终止/停止该请求的runloop。

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

,如果你需要更多的控制,

创建的NSOperation和使用标签的每个操作一个子类,这样就可以通过独特的标签检查快速查找特定的操作。

并将自定义KVO放入操作的子类中,以便在需要时立即清除操作。 我的意思是覆盖该线程的启动方法。

感谢,

纳文珊

+0

我已经子类化了nsoperation,MyDownload类是NSOperation的子类,并且所有的工作权利,当我尝试取消它时,我在if语句中输入,并执行[op取消];但不工作...并且url名称是我用于标记的nsoperation子类的属性... – Piero 2012-04-25 10:35:55

+0

整数检查比字符串比较更快。只需重写取消方法并尝试停止runloop。 – 2012-04-25 10:51:21

+0

使用这个KVO,[self willChangeValueForKey:@“isCancelled”]; _isCancelled = YES; [self didChangeValueForKey:@“isCancelled”]; – 2012-04-25 10:53:27

相关问题