我正在尝试在我的应用程序中添加一项功能,该功能允许用户将以美国格式 (MM/DD/YYYY) 显示的当前日期切换为英国格式 (DD/MM/YYYY) 并返回。
我正在使用分段控件在两个单独的计时器(dateTimer_us 和 dateTimer_uk)之间切换我的 UILabel(dateSlateLabel)。
我一切正常,但每当我切换到 dateTimer_uk 时,dateTimer_us 就会继续反击,就好像我没有杀死它一样。当我说反击时,我的意思是我看到英国格式和美国格式根据计时器的 timeInterval 来回闪烁。因此,由于我的计时器的 timeInterval 是 0.01,我看到美国格式快速闪烁而不是英国格式。我很清楚 dateTimer_us 没有被无效或其他东西正在启动它。当我切换到 dateTimer_us 时,一切似乎都很好,但问题恰恰相反(当我切换到 dateTimer_uk 时)。我认为我的代码/内存管理有问题,但我无法弄清楚。我已经在网上搜索并花了两天时间解决这个问题。
有任何想法吗?
注意:我试过只使用一个计时器和一个 if else 来检查 segmentControl 状态来驱动日期格式,但这似乎不起作用。
这是我的代码:
//////////////////////////////THIS CONTROLS THE DATE TIMER//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
- (IBAction)toggleDateFormat {
if(dateFormatSegmentControl.selectedSegmentIndex == 0) {
[dateTimer_uk invalidate];
[dateTimer_uk release];
dateTimer_uk = nil;
[self dateTimer_us];
}
else if (dateFormatSegmentControl.selectedSegmentIndex == 1) {
[dateTimer_us invalidate];
[dateTimer_us release];
dateTimer_us = nil;
[self dateTimer_uk];
}
}
-(void)dateTimer_us {
dateTimer_us = [[NSTimer scheduledTimerWithTimeInterval: .01
target: self
selector: @selector(displayDate_us)
userInfo: nil
repeats: YES] retain];
}
-(void)displayDate_us; {
NSDateFormatter *formatter =
[[[NSDateFormatter alloc] init] autorelease];
NSDate *date = [NSDate date];
[formatter setDateFormat:@"MM/dd/yyyy"];
[dateSlateLabel setText:[formatter stringFromDate:date]];
}
-(void)dateTimer_uk {
dateTimer_uk = [[NSTimer scheduledTimerWithTimeInterval: .01
target: self
selector: @selector(displayDate_uk)
userInfo: nil
repeats: YES] retain];
}
-(void)displayDate_uk; {
NSDateFormatter *formatter =
[[[NSDateFormatter alloc] init] autorelease];
NSDate *date = [NSDate date];
[formatter setDateFormat:@"dd/MM/yyyy"];
[dateSlateLabel setText:[formatter stringFromDate:date]];
}