спасибо заранее.
У меня есть Quartz Composer View (qcView ниже) и я перемещаю изображение (муравья, если вам интересно код) в произвольном направлении, пока оно не найдет его "дом" в середине QCView. PauseRendering необходим для того, чтобы мы могли видеть движение муравья дюйм за дюймом; без него муравей просто появится у себя дома.
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]. После Clean & Build он будет отлично работать еще на один прогон.
После удаления pauseRendering и resumeRendering муравьи мгновенно появятся у себя дома.
Очевидно, существует локальный для метода QCView pauseRendering массив, который постоянно растет и сжимается, и с помощью единственного QCView и нескольких блоков, обращающихся к нему, вы можете увидеть корень проблемы.
Я исследовал документацию QCView и не могу найти там вдохновения; документация по pauseRendering минимальна. Хотя я уверен, что никто из вас не попробовал что-то столь же глупое, как это, я надеюсь, что у кого-то будет опыт прагматической модификации QCView, и он сможет указать мне правильное направление (ошибаться ... читать «ЛЮБОЙ!») .
[Редактировать: я пробовал варианты «while (! [QcView isPausedRendering])», если это помогает.]