取消NSOperation completionblock

时间:2014-12-22 11:44:33

标签: ios objective-c nsoperation

我有一个NSOperation,在completionblock我花了一些时间来保存到CoreData。实际操作运行得很快。有时我需要阻止此completetionblock运行。我看不到一种简单的方法来取消它,所以我尝试设置BOOl并在必要时跳过其中的代码。但是,操作在单例内运行,另一个类需要运行队列(这就是我需要取消completionblock)的原因。关于如何取消completeionblock

的任何想法

3 个答案:

答案 0 :(得分:0)

您只需将completionBlock设置为nil

即可
operation.completionBlock = nil

但我认为从另一个类取消操作的完成块可能是一种设计气味。您最终可能会遇到难以维护和调试的代码,因为不清楚为什么以及何时更改操作流程。

答案 1 :(得分:0)

NSOperation运行速度快,耗时很长的完成块似乎是错误的。 NSOperation可以取消,这是它的主要目的。除非您自己完成所有工作,否则无法取消块。

我建议创建一个NSOperation的子类来完成所有工作,包括现在在完成块中完成的工作,现在在完成块中的代码可以检查它是否被取消。

另一方面,"保存到CoreData"似乎不是你可以取消一半的东西,所以更好的建议可能是退后一步,找出你真正想要发生的事情。

答案 2 :(得分:-1)

您可以通过调用NSOperation的取消方法取消操作。

[取消操作];