2016-03-09 22 views
0

我需要使用一个没有正确启动的库。调用一些方法后,它会创建一些NSOperation,它永远不会完成,并与睡眠状态​​错误结束了和,因为我没有这些操作的情况下,我无法将其取消。 有没有可能取消它没有访问?是否有可能在无法访问的情况下取消nsoperation?

+0

号停止/取消'NSOperation'你应该能够访问它。 –

+1

技术上讲,你也将能够取消操作,如果你有机会访问托管'NSOperationQueue',我敢肯定你没有访问要么... –

回答

3

请注意,即使你有机会访问到NSOperation或它的队列中,“取消”并不意味着“让走。”这只意味着“如果它尚未启动,则不启动,如果它已启动,则设置取消标志。”如果NSOperation没有检查其取消标志,那么它仍然不会终止。没有办法做你想做的事情,这是故意的。强行终止操作会使程序处于未定义状态。

这听起来像你要么在图书馆中的错误,或者您是如何使用该库中的错误(我怀疑后者之前前者,但它取决于库)。你将需要追踪该错误并解决它。

0

你可以访问NSOperationQueue其中这些操作已被添加? 如果是的话,你可以像这样访问:

var queue = NSOperationQueue.mainQueue() 
    // or 
    queue = NSOperationQueue.currentQueue()! 

    let operations = queue.operations 
    for operation in operations{ 
     if operation.name == "name of operation if you know it" { 

      operation.cancel() 
     } 
    } 
+0

如果你要做到这一点,你可以使用'cancelAllOperations()'。相关操作不太可能位于主队列或当前队列中(如果它位于当前队列中,那么此代码将不会运行,因为当前队列将被阻塞,并且如果它位于主队列中,整个用户界面将被锁定,操作系统将杀死我们)。 –

+0

同意你Rob,但为什么这个代码不会在当前队列的情况下运行。我认为行动可以同时进行 –

相关问题