我正在尝试在我的应用中添加一项功能,允许用户将以美国格式(MM / DD / YYYY)显示的当前日期切换为英国格式(DD / MM / YYYY)并返回。
我正在使用段控件在两个不同的计时器(dateTimer_us& dateTimer_uk)之间切换我的UILabel(dateSlateLabel)。
我已经完成了所有工作,但每当我切换到dateTimer_uk时,dateTimer_us都会继续反击,就像我没有杀死它一样。当我说回击时,我的意思是我看到英国格式的美国格式根据计时器的timeInterval来回闪烁。所以,由于我的计时器'timeInterval是.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]];
}
答案 0 :(得分:0)
你在这里展示的设计是不必要的复杂。首先,您需要一个百分之一秒的间隔来更新代表当前时间的标签。这大约是发射的大约一百倍。
你的设计应该是这样的:
NSDateFormatter
属性添加到视图控制器类。你不需要暴露
这个属性是公开的。alloc
/ init
您的NSDateFormatter
媒体资源支持您想要的任何默认设置,美国或英国(您可以从NSUserDefaults
读取/写入此偏好设置。NSDateFormatter
属性,无论它是什么值(方法不关心)来呈现日期/时间release
NSDateFormatter
属性和alloc
/ init
新的invalidate
/ release
NSTimer
对象