미리 감사드립니다.Objective-C 및 Quartz Composer; [qcView pauseRendering]은 Bad_Access를 야기합니다.
나는 Quartz Composer View (아래 qcView)를 가지고 있으며 QCView의 중간에 'home'이 될 때까지 임의의 방향으로 이미지 (코드 궁금한 점이 있다면 개미)를 이동합니다. pauseRendering은 앤트 움직임을 인치 단위로 볼 수 있도록 필요합니다. 그것없이 개미가 단지 '집'에 나타날 것입니다.
while([self distance] > acceptableOffset){
[qcView pauseRendering];
[self moveTowardsDestination:@"home"];
[qcView resumeRendering];
}
이것은 단일 개미에 대해 완벽하게 작동합니다.
방정식에 다른 개미를 추가 할 때 디스패치 대기열과 두 개의 블록을 사용합니다. 우리가 찾고있는 정확한 동작 -이 코드가 실행되면
dispatch_async(queue, ^{
[theAnt findCenter];
});
dispatch_async(queue, ^{
[otherAnt findCenter];
});
는 두 이모는 자신의 집의 동시에 서둘러. 그러나 실행을 중단하고 다시 빌드하면 [qcView pauseRendering] 메서드 내에서 어딘가에서 Exc_Bad_Access를 즉시 얻을 수 있습니다. 깨끗한 후 & 빌드를 한 번 더 실행하면 완벽하게 작동합니다. pauseRendering 및 resumeRendering을 제거하면 개미가 즉시 집에 나타납니다.
지속적으로 커지고 축소되는 QCView pauseRendering 메서드에 로컬 인 배열이 있으며, 단일 QCView와 여러 블록에 액세스하면 문제의 근원을 볼 수 있습니다.
나는 QCView documentation을 조사했으며 영감을 얻은 것처럼 보이지 않습니다. pauseRendering에 대한 문서는 최소한입니다. 아무도 당신처럼 어리석은 무언가를 시도해 본 적이 없지만, 누군가가 QCView를 수정하는 경험을 쌓았을 것이고, 나를 오른쪽으로 가리킬 수있을 것입니다. (오류 ... "ANY!") 방향 .
[편집 : 나는의 변화를 시도했다 "동안 ([qcView isPausedRendering]!)", 즉 도움이된다면.]
빠른 답장을 보내 주셔서 감사합니다.문서가 겉보기에 희박하고 이후 Google 검색은 'qcview 동시성'에 대한 관련 결과를 산출하지 않습니다. 직관적으로 잠그는 절차가 일시 중지 문제를 해결할 수 있다고 생각하십니까? –
아마도 그렇지 않습니다. 일반적으로 내부 구현을 제어 할 수 없기 때문에 잠금 장치를 두어 스레드로부터 안전하게 할 수는 없습니다. http://lists.apple.com/에 Quartz Composer 목록이있을 것이라고 생각합니다. 그렇다면 QC 엔지니어 중 한 명에게 연락 할 가능성이 더 높습니다. – bbum