2011-08-20 4 views
1

[[CCDirector sharedDirector] popScene]을 수행 한 직후 충돌이 발생하는 것 같습니다. 나는 이유를 정말로 모른다. 모든 단서가 도움이 될 것입니다. 감사합니다!popScene 후 예약 된 타이머 크래시

Crashlog :

#0 0x99e5ef84 in objc_msgSend() 
#1 0x302d543a in __NSFastEnumerationMutationHandler() 
#2 0x00046b46 in -[CCScheduler tick:] (self=0x1919ac0, _cmd=0x7b682, dt=0.0333320014) at /Users/Sup3rpanda/Dev/My Projects/Puzzle/libs/cocos2d/CCScheduler.m:211 
#3 0x0001fb52 in -[CCDirector mainLoop] (self=0xf10a30, _cmd=0x76272) at /Users/Sup3rpanda/Dev/My Projects/Puzzle/libs/cocos2d/CCDirector.m:208 
#4 0x305355cd in __NSFireTimer() 
#5 0x302454a0 in CFRunLoopRunSpecific() 
#6 0x30244628 in CFRunLoopRunInMode() 
#7 0x32044c31 in GSEventRunModal() 
#8 0x32044cf6 in GSEventRun() 
#9 0x309021ee in UIApplicationMain() 
#10 0x00002e94 in main (argc=1, argv=0xbfffef60) at /Users/Sup3rpanda/Dev/My Projects/Puzzle/main.m:13 

예약 타이머 :

tGridTimer = [[CCTimer alloc] initWithTarget: self selector: @selector(gridSlideUpForced2:) interval: sGridSpeed]; 
[[CCScheduler sharedScheduler] scheduleTimer:tGridTimer]; 

충돌과 관련이있을 것으로 보인다 코코스 2D 코드의 비트 :

-(void) tick: (ccTime) dt 
{ 
    if(timeScale_ != 1.0f) 
     dt *= timeScale_; 

    for(id k in methodsToRemove) 
     [scheduledMethods removeObject:k]; 

    [methodsToRemove removeAllObjects]; 

    for(id k in methodsToAdd) 
     [scheduledMethods addObject:k]; 
    [methodsToAdd removeAllObjects]; 

    for(CCTimer *t in scheduledMethods) 
     impMethod(t, fireSelector, dt); 
     [[CCScheduler sharedScheduler] scheduleTimer:tGridTimer]; 
+0

또한 Cocos2d 포럼의 질문이 있습니다. http://www.cocos2d-iphone.org/forum/topic/20015?replies=1#post -111725 – Sup3rpanda

+2

popScene 전에 타이머 호출을 취소 했습니까? –

+0

나는 그것을 쓸모 없게하려고 노력했다. popScene을 replaceScene으로 바꿨지 만 더 이상 추락하지 않습니다 ... 어떤 단서가 필요한가요? – Sup3rpanda

답변

0

당신이 당신의 타이머를 정리하고 있습니까 장면 클래스의 onExit 또는 dealloc? 여전히 일부 스케줄러가 여전히 실행 중임을 알 수있는 장면 일 수 있습니다.

+0

예. 나는 결국 되돌아 가서 그렇게했다. – Sup3rpanda

+0

@ Sup3rpanda 그래서 문제가 해결 되었습니까? –