7

我有NSOperationQueue一些NSOperationsNSInvocationOperations特别是)。此操作会进行一些计算并相应地更改 UI 元素的状态(当然,通过performSelectorOnMainThread:...),通常使用动画。

我的 UI 有 UINavigationViewController 和一些用于导航到另一个视图的按钮。因此用户可以离开当前视图,而计算/动画仍在进行中。我需要以某种方式阻止这种情况,直到用户返回当前视图。

我发现的唯一解决方案是创建一些线程安全的布尔标志 - 并在所有线程中检查它(例如:while !flag sleep_for_some_time;)。有更好的吗?

4

1 回答 1

13

这个问题有点含糊,所以如果不知道所有的代码就很难说。话虽如此,我可以通过以下方式解决问题:

选项 1. 在您的 NSOperation 子类中,添加您自己的原子 KVO 属性“isPaused”。在操作本身中,观察该属性并在它发生变化时进行相应的处理。

选项 2。您是否曾经暂停操作队列本身?如果是这样,请考虑从您的操作中观察该属性,如果该值发生变化,每个人都可以独立地采取行动。

选项 3. 取消队列中的所有操作,如果视图再次出现,只需重新启动新操作即可。

不过,总的来说,暂停已经在进行中的操作并没有灵丹妙药。您必须自己烘焙解决方案。不过伤害应该不会太高。

于 2010-10-15T20:14:46.443 回答