我有一个NSOperation
,在completionblock
我花了一些时间来保存到CoreData。实际操作运行得很快。有时我需要阻止此completetionblock
运行。我看不到一种简单的方法来取消它,所以我尝试设置BOOl
并在必要时跳过其中的代码。但是,操作在单例内运行,另一个类需要运行队列(这就是我需要取消completionblock
)的原因。关于如何取消completeionblock
?
答案 0 :(得分:0)
您只需将completionBlock
设置为nil
:
operation.completionBlock = nil
但我认为从另一个类取消操作的完成块可能是一种设计气味。您最终可能会遇到难以维护和调试的代码,因为不清楚为什么以及何时更改操作流程。
答案 1 :(得分:0)
NSOperation运行速度快,耗时很长的完成块似乎是错误的。 NSOperation可以取消,这是它的主要目的。除非您自己完成所有工作,否则无法取消块。
我建议创建一个NSOperation的子类来完成所有工作,包括现在在完成块中完成的工作,现在在完成块中的代码可以检查它是否被取消。
另一方面,"保存到CoreData"似乎不是你可以取消一半的东西,所以更好的建议可能是退后一步,找出你真正想要发生的事情。
答案 2 :(得分:-1)
您可以通过调用NSOperation的取消方法取消操作。
[取消操作];