2011-10-24 6 views
3

NSTimer 메서드를 호출하려고하는데 작동하지 않습니다. 사용자가 일정에 설정 한 특정 날짜와 시간에이 메서드를 한 번 실행해야합니다.NSTimer가 fireDate로 초기화되지 않습니다.

나는 나의 viewDidLoad 방법이 코드가 있습니다

NSDateComponents *comps = [[NSDateComponents alloc] init]; 

[comps setDay:24]; 
[comps setMonth:10]; 
[comps setYear:2011]; 

[comps setHour:23]; 
[comps setMinute:11]; 
[comps setSecond:0]; 


NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *date = [gregorian dateFromComponents:comps]; 
schedulerTimer=[[NSTimer alloc] initWithFireDate:date interval:0 target:self selector:@selector(recordByScheduler:) userInfo:nil repeats:false]; 

을하지만이 코드는 아무것도 실시하지 않습니다. 아마 NSCalendar을 오해 한 것 같습니다. 내가 여기서 뭘해야하지? 그리고 두 번째 질문 : 응용 프로그램이 백그라운드에서 실행될 때 NSTimer이 발생합니까?

답변

5

런 루프에서 타이머를 예약해야합니다.

[[NSRunLoop currentRunLoop] addTimer:schedulerTimer forMode:NSDefaultRunLoopMode]; 

또는 상황에 따라 비슷합니다. 질문 편집에

응답 : 응용 프로그램이 백그라운드에있을 때

없음 NSTimer가 실행되지 않습니다.

2

앱이 백그라운드에서 일시 중지되면 NSTimer가 실행되지 않습니다. 필요한 것에 따라 UILocalNotification을 사용할 수 있습니다.

+0

니스. 그는 알람을 설정하려고하고, 실제로 전혀 NSTimer을 원하는되었을 수 있습니다. – NJones

0

@NJones가 대답을 시도했지만 작동하지 않았습니다. 약간의 저글링으로 NSDefaultRunLoopMode이 아닌 NSRunLoopCommonModesmainRunLoop에 사용해야합니다. 예를 들어,

[[NSRunLoop mainRunLoop] addTimer:schedulerTimer forMode:NSRunLoopCommonModes]; 

아니면 내가 지금 사용 스위프트,

:

NSRunLoop.mainRunLoop().addTimer(schedulerTimer, forMode: NSRunLoopCommonModes) 

하지만, 그것은 모드, 나의 경우에는 작동을 방지하는 루프를 실행합니다.

NSDefaultRunLoopMode

NSConnection 객체가 아닌 다른 입력 소스를 처리 할 수있는 모드 :

이 문서는 다음을 말한다.

이것은 가장 일반적으로 사용되는 실행 루프 모드입니다.

iOS 2.0 이상에서 사용할 수 있습니다.

NSRunLoopCommonModes

개체 "공통"모드 세트의 멤버로서 선언 된 모든 운전 루프 모드가 모니터 모드로이 값을 사용하여 실행 된 루프에 추가; CFRunLoopAddCommonMode의 설명을 참조 자세한.

아이폰 OS 2.0에서 사용 가능

나중에. 나에게 발생하지 마십시오

관련 문제