여기 내 상황이 있습니다 : [stopWatchTimer invalidate];
을 호출하면 멈추지 않는 카운트 다운 응용 프로그램을 만들고 있는데, 이유가 없습니다. 여기 내 코드는 다음과 같습니다.목표 -C 타이머가 무효화되지 않습니다
- (IBAction)btnStartPressed:(id)sender {
//Start countdown with the time on the Date Picker.
timeLeft = [pkrTime countDownDuration];
[self currentCount];
lblTimer.text = time; //sets the label to the time set above
pkrTime.hidden = YES;
btnStart.hidden = YES;
btnStop.hidden = NO;
//Fire this timer every second.
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/1.0
target:self
selector:@selector(reduceTimeLeft:)
userInfo:nil
repeats:YES];
}
- (void)reduceTimeLeft:(NSTimer *)timer {
//Countown timeleft by a second each time this function is called
timeLeft--;
// Get the system calendar
NSCalendar *sysCalendar = [NSCalendar currentCalendar];
// Create the NSDates
NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:timeLeft sinceDate:date1];
// Get conversion to months, days, hours, minutes
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:date1 toDate:date2 options:0];
int sec = [conversionInfo second];
int min = [conversionInfo minute];
int hour = [conversionInfo hour];
NSString *seconds = [NSString stringWithFormat:@"%d",sec];
NSString *minutes = [NSString stringWithFormat:@"%d",min];
if (sec <= 9)
seconds = [NSString stringWithFormat:@"0%d", sec];
if (min <= 9)
minutes = [NSString stringWithFormat:@"0%d", min];
if ([conversionInfo hour] == 0)
time = [NSString stringWithFormat:@"%@:%@", minutes, seconds];
else
time = [NSString stringWithFormat:@"%d:%@:%@", hour, minutes, seconds];
lblTimer.text = time; //sets the label to the time set above
NSLog(@"%d", timeLeft);
if (timeLeft == 0) {
[self timerDone];
[stopWatchTimer invalidate];
stopWatchTimer = nil;
}
}
-(void)timerDone {
pkrTime.hidden = NO;
btnStart.hidden = NO;
btnStop.hidden = YES;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Timer Done" message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
[alert show];
[self playAlert];
}
제발 알려주세요. 제 코드는 어디서든지 문제를 찾을 수 없습니다!
일부 수정 사항과 함께 코드를 올바르게 실행할 수 있습니다. (1) [pkrTime countDownDuration]; [self currentCount] & [self playAlert] (3) 모든 주석 처리 된 설정자를 주석 처리했습니다. – HKTonyLee