Ios 启动NSTimer后,如何更改显示的时间格式?
我将从一个项目开始我的iOS体验,该项目将一个大时钟作为用户界面的一部分。当我尝试结合一个用户可调切换开关,从12小时切换到24小时的时间格式时,我遇到了一些问题。用户初始更改屏幕切换后,显示的时间在两种格式之间“闪烁” 我的做法:Ios 启动NSTimer后,如何更改显示的时间格式?,ios,objective-c,nstimer,nsdateformatter,Ios,Objective C,Nstimer,Nsdateformatter,我将从一个项目开始我的iOS体验,该项目将一个大时钟作为用户界面的一部分。当我尝试结合一个用户可调切换开关,从12小时切换到24小时的时间格式时,我遇到了一些问题。用户初始更改屏幕切换后,显示的时间在两种格式之间“闪烁” 我的做法: viewDidLoad设置用于12小时时间格式的属性,并调用startTimer方法 startTimer方法:NSDateFormatter已设置NSTimer以预定的时间间隔启动,将日期格式化程序传递给upDateTime方法 updateTimer方法检查当前
viewDidLoad
设置用于12小时时间格式的属性,并调用startTimer方法NSDateFormatter
已设置NSTimer
以预定的时间间隔启动,将日期格式化程序传递给upDateTime方法iAction
将使计时器无效,并将所需的时间格式属性传递给startTimer方法- 下面的代码显示了一种方法,我通过设置区域设置并将其传递给日期格式化程序来修改时间格式。我认为这可能是一个与设备区域设置冲突的问题。我尝试使用自定义日期格式化程序(例如@“hh:mm a”),但也遇到了同样的闪烁问题
计划间隔显示为1秒。我有这个用于测试,但在0.1秒时看到了相同的行为n计时器
- updateTime方法中的
调用显示DateFormatter对象id和显示的时间在连续循环之间变化,即使用户没有调整切换开关李>NSLog
- 我怀疑这可能与计时器的启动和停止方式有关。也许以前格式的旧“调用”仍在后台运行?我尝试将
移动到方法中的几个位置,但没有成功[updateTimer invalidate]
问题在于,您有两个不同的
updateTimer
--self.updateTimer
类变量和updateTimer
局部变量。您正在使类变量无效,但在每次调用startTimer
期间,都会初始化并运行多个具有不同区域设置的本地nstimer
。这就是为什么您会看到这种“闪烁”——这是因为多个NSTimer
s正在使用不同的localeValues设置标签
要解决此问题,请更改:
NSTimer *updateTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTime:) userInfo:timeFormatter repeats:YES];
到
非常感谢!我认为我很有可能只是犯了一个愚蠢的错误。现在一切都好了。
NSTimer *updateTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTime:) userInfo:timeFormatter repeats:YES];
self.updateTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTime:) userInfo:timeFormatter repeats:YES];