我正在构建基于用户创建重复活动的应用程序'。每个Event对象都有一天(存储为typedef NS_ENUM)和一个时间(存储为NSDate)和一个持续时间(表示分钟的NSInteger)。每个事件总是每周重复一次。事件存储在Core Data托管的跨设备同步数据库中。并且旨在重复使用,使得他们不需要每周重新创建(因此日期独立的工作日)。事件完成后,会更新一些用户统计信息。
举个例如星期一上午10点开始的活动,持续25分钟。在这种情况下,我希望获得NSDate
this Monday at 10:25
的{{1}}表示(这不是问题),此时,更新用户统计信息,这就是问题所在。
在特定时间执行代码的最佳方法是什么?
我原本想过使用[[NSDate alloc] initWithFireDate:interval:target:selector:userInfo:repeats:]
。但是,很难确保target
对象已初始化,并且难以同步设备之间的计时器。也就是说,确保每个计时器都设置为同时触发(如果日期,时间或持续时间发生变化)。
我的第二个想法是,使用当前系统时间更新应用程序启动时的统计信息,并回顾之前的事件。但是,如果用户打开了应用程序,我希望统计信息能够实时更新。
非常感谢任何帮助或想法。我也对如何改变模型以更好地解决这个问题持开放态度。
提前致谢。
答案 0 :(得分:0)
当计时器需要触发时,您的应用可能存在两种可能的情况 - 它是在前台还是在前台。 NSTimer只会在应用程序位于前台时触发(除了少数例外情况,例如在后台执行任务中运行)。
您可以按如下方式处理这两种情况: