2009-09-18 4 views
3

몇 초마다 반복되는 두 개의 타이머를 내 애플리케이션에 설치했습니다. 타이머가 무효화 될 때를 제외하고는 모두 정상적으로 작동합니다. 전화가 잠겨있을 때 타이머를 무효화하고 전화가 잠길 때 다시 생성하려고합니다.무효화 할 때 Iphone EXC_BAD_ACCESS로 NSTimer 크래시가 발생합니다.

메신저 알림을 사용하여 타이머를 무효화/생성하는시기를 알 수 있습니다.

clockTicker = [[NSTimer scheduledTimerWithTimeInterval: 1 
              target: self 
              selector: @selector(showActivity) 
              userInfo: nil 
              repeats: YES] retain]; 

alarmTicker = [[NSTimer scheduledTimerWithTimeInterval: CONST_ALARMTIMER 
               target: self 
              selector: @selector(checkAndLaunchAlarm) 
              userInfo: nil 
               repeats: YES] retain]; 

이것을 notify_willResigneActive 방법이 포함되어 있습니다 :

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notify_didBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notify_willResigneActive:) name:UIApplicationWillResignActiveNotification object:nil]; 

은 notify_didBecomeActive 방법에 포함 된 내용입니다

if (alarmTicker) { 
    [alarmTicker invalidate]; 
    [alarmTicker release]; 
    alarmTicker = NULL; 
} 

if (clockTicker) { 
    [clockTicker invalidate]; 
    [clockTicker release]; 
    clockTicker = NULL; 
} 

문제는 내가이 두 번째 타이머 무효화에 디버깅 할 때 내가 얻을 수 있다는 것입니다 오류. 이상한 것은 타이머의 순서를 바꾸면 (먼저 clockTicker를 무효화하는 것처럼) .. 두 번째 타이머에서 여전히 오류가 발생합니다.

내가 잘못 할 수 있습니까? 레오나르도

답변

5

무효화 타이머를 해제

덕분에, 무효화 한 후 해제 할 필요가 왜 그 충돌을 이잖아. 그러나 나는 당신이 타이머를 유지하고 있다는 것을 알아 챘습니다 ... 이것 역시 필요하다는 것을 확신하지 못했습니다.

+0

어쩌면 ..하지만 어느 쪽이든 작동하지 않습니다. 릴리스 라인이 아니라 두 번째 타이머가 충돌합니다. 나는 많은 정보를 얻을 수 없다. 내가 잃어버린 것이 있는지 좀비가 볼 수 있도록 노력할 것이다. – Homer1980ar

-1

NULL을 설정하는 타이머가 nil이 아닌 설정으로되어 있는지는 잘 모르겠지만 nil 개체를 호출하면 아무 작업도 수행하지 않습니다. NULL 객체에 대한 호출을 수행하면이 객체를 확인하지는 못했지만 충돌이 발생했다고 생각합니다. 이 게시물은 도움이 될 수 있습니다 : NULL vs nil in Objective-C

0

알람 타이머와 발사 방법을 nil로 설정하면됩니다. (alarmTicker) 또는 if (clockTicker)가 올바른지 확인하십시오. 값.

관련 문제