2012-05-30 2 views
-2

ViewController 클래스에 NSTimer가 있습니다 .. 그리고 NStimer의 모든 메서드가 해당 클래스에 있습니다 .. 내 NSTimer가 제대로 재생 및 일시 중지 중입니다 ... 집 버튼을 누르면 iPhone도 타이머가 제대로 작동합니다 (응용 프로그램이 포 그라운드로 들어갈 때 응용 프로그램이 백그라운드로 들어갈 때부터 실행되기 시작 함) ... 내 응용 프로그램에서 응용 프로그램이 포어라운드로 들어갈 때 신속하게 경고를 발생합니다 (응용 프로그램의 UIAlertview) didEnterForeGround). NSTimer가 화면에 나타나면 (경고에 응답하지 않음) NSTimer가 실행 중입니다 .. 사용자가 내 경고에 응답 할 때까지 NSTimer를 중지하고 싶습니다 ... 그 후 NSTimer를 시작하고 싶습니다. 그걸 할 수 있을까 ...? 제발 도와주세요 ... 미리 감사드립니다 ... 나는 Appelegate.m 파일에서 NSTimer 메서드를 호출하고 싶습니다 ... 이러한 메서드를 올바르게 호출하는 중 ... 그리고 ViewController의 메서드가 호출됩니다 .. 그러나 작업이 수행되지 않습니다. .. 같은 방법에 대한시의 ViewController 클래스는 노력에서 전화 ...Objective C에서 NSTimer를 클릭하면 홈 버튼을 클릭

enter code here 

ViewController.h

+(ExamViewController *)evcInstance; 

ViewController.m

ExamViewController *evc = nil; 
@implementation ExamViewController 

+(ExamViewController *)evcInstance 
{ 
if(!evc) 
{ 
    evc = [[ExamViewController alloc] init]; 
} 
return evc; 
} 




- (void)onStartPressed 
{ 
stopwatchtimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES]; 
[[NSRunLoop currentRunLoop] addTimer:stopwatchtimer forMode:NSRunLoopCommonModes]; 
resume.hidden = YES; 
resume.enabled=NO; 
pause.hidden = NO; 
pause.enabled=YES; 
} 


- (void)onStopPressed 
{ 


[stopwatchtimer invalidate]; 
stopwatchtimer = nil; 
pause.hidden = YES; 
pause.enabled=NO; 
resume.hidden = NO; 
resume.enabled=YES; 
} 

Appdelegate.m

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
[[ExamViewController evcInstance] onStopPressed]; 

NSLog(@"applicationWillEnterForeground"); 

if(viewCalled ==YES) 
{ 

    UIAlertView *alertview=[[UIAlertView alloc]initWithTitle:@"" message:@"DO! You Want To continue" delegate:self cancelButtonTitle:@"YES" otherButtonTitles:@"NO", nil]; 

    [alertview show]; 

    [alertview release]; 



} 
/* 
Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 
*/ 
} 
+0

내 질문을 편집했습니다. 한번만 보시기 바랍니다. – SriKanth

+2

Google에서 도와 드릴 수 있도록 해당 코드를 입력하십시오! – lnafziger

+0

코드를 포함 시켰습니다. 한 번 확인하십시오 .. – SriKanth

답변

1

몇 가지 :

1)이 불완전 싱글 디자인처럼 보인다. 싱글 톤을 원할 경우 like this one 게시물을 참조하십시오.

2) 현재 실행 루프에 stopwatchtimer를 추가 할 필요가 없습니다. scheduledTimerWithTimeInterval 메소드는이를 스케쥴합니다.

3) 나는 스톱워치 타이머를 선언하는 곳을 보지 못하지만, 그것을 소유 자산 (또는 ARC에서는 강함)으로 선언해야합니다.

4) 타이머를 중지하려면 [stopwatchtimer invalidate];으로 전화하십시오. 다시 시작하려면 원래 호출 한 것과 동일한 scheduledTimerWithTimeInterval 클래스 방법을 사용하여 이전 인스턴스를 다시 인스턴스화하고 덮어 씁니다.

5) 경고보기가 완료되면 아무것도 할 대리자 방법을 구현하려면 :

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 

그래서 당신은 당신이 경고가 완료 알림 메시지를받을 때 다음을 다시 작성, 경고를 제시하기 전에 타이머를 무효화 할 수 있습니다.

+1

나는이 모든 것을 적용했다. 그러나 NSTimer가 멈추지 않는다. 경고가 화면 상에있을 때 ... – SriKanth

+0

게시 한 코드에서 멈추는 것을 보지 못한다. [경고 표시] 전에 무효화 또는 "onStopPressed"전화가 필요합니다. 쇼 바로 전에 줄에서 해보십시오. 그것은 멈출 것이다. 그래도 계속 불이 켜지면 타이머가 두 개 이상 있음을 의미합니다. 빌드 지점에 중단 점을 넣으십시오. 한 번만 중단 점을 눌러야합니다. 행운을 빕니다. – danh

관련 문제