Ios 启动NSTimer后,如何更改显示的时间格式?

Ios 启动NSTimer后,如何更改显示的时间格式?,ios,objective-c,nstimer,nsdateformatter,Ios,Objective C,Nstimer,Nsdateformatter,我将从一个项目开始我的iOS体验,该项目将一个大时钟作为用户界面的一部分。当我尝试结合一个用户可调切换开关,从12小时切换到24小时的时间格式时,我遇到了一些问题。用户初始更改屏幕切换后,显示的时间在两种格式之间“闪烁” 我的做法: viewDidLoad设置用于12小时时间格式的属性,并调用startTimer方法 startTimer方法:NSDateFormatter已设置NSTimer以预定的时间间隔启动,将日期格式化程序传递给upDateTime方法 updateTimer方法检查当前

我将从一个项目开始我的iOS体验,该项目将一个大时钟作为用户界面的一部分。当我尝试结合一个用户可调切换开关,从12小时切换到24小时的时间格式时,我遇到了一些问题。用户初始更改屏幕切换后,显示的时间在两种格式之间“闪烁”

我的做法:

  • viewDidLoad
    设置用于12小时时间格式的属性,并调用startTimer方法
  • startTimer方法:
    NSDateFormatter
    已设置
    NSTimer
    以预定的时间间隔启动,将日期格式化程序传递给upDateTime方法
  • updateTimer方法检查当前时间并设置屏幕上的时间
  • 如果用户单击屏幕上的12小时/24小时分段控件,
    iAction
    将使计时器无效,并将所需的时间格式属性传递给startTimer方法
  • 测试/观察:

    • 下面的代码显示了一种方法,我通过设置区域设置并将其传递给日期格式化程序来修改时间格式。我认为这可能是一个与设备区域设置冲突的问题。我尝试使用自定义日期格式化程序(例如@“hh:mm a”),但也遇到了同样的闪烁问题
    • n计时器
      计划间隔显示为1秒。我有这个用于测试,但在0.1秒时看到了相同的行为
    • updateTime方法中的
      NSLog
      调用显示DateFormatter对象id和显示的时间在连续循环之间变化,即使用户没有调整切换开关
    • 我怀疑这可能与计时器的启动和停止方式有关。也许以前格式的旧“调用”仍在后台运行?我尝试将
      [updateTimer invalidate]
      移动到方法中的几个位置,但没有成功
    根本问题: 有什么建议或更好的方法让屏幕上的时钟与用户开关的12小时与24小时的时间格式?为什么显示的时间格式一直循环

    代码:


    问题在于,您有两个不同的
    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];