2010-09-08 2 views
6

У меня NSOperationQueue с некоторыми NSOperations в нем (NSInvocationOperations, в частности). Эти операции выполняют некоторые вычисления и изменяют состояния элементов интерфейса соответственно (конечно, через performSelectorOnMainThread:...), часто с использованием анимаций.Пауза NSOperation

My UI имеет UINavigationViewController и некоторые кнопки для навигации к другим представлениям. Таким образом, пользователь может оставить текущий вид, в то время как вычисления/анимация все еще продолжается. И мне нужно остановить это так или иначе, пока пользователь не вернется к текущему виду.

Единственное, что я нашел, это создать некоторый поток булевых флагов - и проверить его во всех потоках (что-то вроде: while! Flag sleep_for_some_time;). Есть что-то лучше?

ответ

12

Вопрос немного расплывчатый, так что трудно сказать, не зная весь код в игре. С учетом сказанного я могу подойти к этой проблеме:

Вариант 1. В вашем подклассе NSOperation добавьте свое собственное свойство KVO атома "isPaused". Внутри самой операции обратите внимание на это свойство и обрабатывайте его соответственно, если он когда-либо изменится.

Вариант 2. Вы когда-либо приостанавливаете операцию «Очередь операций»? Если это так, рассмотрите возможность наблюдения этого свойства из ваших операций, и каждый из них самостоятельно может принять меры, если это значение изменится.

Вариант 3. Отмените все операции в очереди, и если представление появится снова, просто перезапустите его с помощью новых операций.

В целом, нет волшебной пули для приостановки операций, которые уже выполняются. Вам придется испечь свое решение. Однако ущерб не должен быть слишком плохим.

Смежные вопросы