заранее спасибо.
У меня есть Quartz Composer View (qcView ниже) и я перемещаю изображение (муравья, если вас интересует код) в случайном направлении, пока оно не найдет «дом» в середине QCView. Пауза Rendering необходима для того, чтобы мы могли видеть, как муравей движется дюйм за дюймом; без него муравей просто появится у своего «дома».
while([self distance] > acceptableOffset){
[qcView pauseRendering];
[self moveTowardsDestination:@"home"];
[qcView resumeRendering];
}
Это прекрасно работает для одного муравья.
Когда я добавляю в уравнение еще одного муравья, я использую очередь отправки и два блока.
dispatch_async(queue, ^{
[theAnt findCenter];
});
dispatch_async(queue, ^{
[otherAnt findCenter];
});
Когда этот код запускается, две тетушки одновременно бегут к своим домам — именно то поведение, которое мы ищем. Однако, когда я останавливаю выполнение и снова строю, я немедленно получаю Exc_Bad_Access где-то внутри метода [qcView pauseRendering]. После очистки и сборки он будет работать еще один раз. Если пауза и возобновление рендеринга удалены, муравьи мгновенно появятся в своем доме.
По-видимому, существует массив, локальный для метода QCView pauseRendering, который постоянно увеличивается и уменьшается, и с помощью одного QCView и нескольких блоков, обращающихся к нему, вы можете увидеть корень проблемы.
Я изучил QCView документацию и, похоже, не находит там вдохновения; документация по pauseRendering минимальна. Хотя я уверен, что никто из вас не пробовал что-то столь же глупое, как это, я надеюсь, что у кого-то будет опыт прагматической модификации QCView, и он сможет указать мне правильное (ошибаюсь... читай "ЛЮБОЕ!") направление. .
[Редактировать: я пробовал варианты «пока (! [qcView isPausedRendering])», если это помогает.]