首先,这是我无法实现的目标:
我想从timer
到Current date and Time
运行user Selected Date and Time
。
我做了什么:
IBOutlet
DatePicker
UIButton
我尝试过:
- (IBAction)schedulePostTapped:(id)sender
{
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateCountdown:) userInfo:nil repeats:YES];
}
- (void)updateCountdown:(NSTimer *)timer
{
NSDate *startingDate = [chooseDate date];
NSDate *endingDate = [NSDate date];
double secondsTime = [endingDate timeIntervalSinceDate:startingDate];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:startingDate toDate:endingDate options:0];
NSInteger hours = [dateComponents hour];
NSInteger minutes = [dateComponents minute];
NSInteger seconds = [dateComponents second];
NSString *countdownText = [NSString stringWithFormat:@"%ld Hours %ld Minutes %ld Seconds",(long)hours, (long)minutes, (long)seconds];
self.statusLabel.text = countdownText;
NSLog(@"%@",[NSString stringWithFormat:@"%f",secondsTime]);
if (secondsTime==0) {
[timer invalidate];
timer = nil;
}
}
我遇到的问题:
**延迟必须是1m04Sec,但它显示我1m55Sec **
答案 0 :(得分:1)
每秒钟都没有定时器文件,并且在启动定时器后不要求结束时间。
从用户获取结束时间,然后使用initWithFireDate:
启动未来日期的计时器。您必须使用addTimer:forMode:将新计时器添加到运行循环中。在触发时,计时器将消息aSelector发送到目标。
节省他们触摸按钮的时间。通过将选定的持续时间添加到保存的时间来计算开火时间。
对于文档添加方法调用,参数无关紧要,单击initWithFireDate
并阅读“快速帮助检查器”中的文档
答案 1 :(得分:0)
请注意,模60,-55与5一致。看起来你向后计算的事实可能会让人感到困惑。看看这个:
NSDate *startingDate = [chooseDate date];
NSDate *endingDate = [NSDate date];
因此endingDate
是第二行执行的当前时间,而startingDate
是选择器中选择的时间(在您的示例中将来)。当您根据日历计算差异时......
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:startingDate toDate:endingDate options:0];
您的分钟数似乎为-1
,秒数为-55
。尝试通过在上面的方法调用中切换startingDate
和endingDate
的位置,或者通过交换分配给它们的值来转过来。我认为这会让你获得更直观的结果。