如何在iOS上处理时间事件?

我正在编写一个iPad应用程序,当这一天变为星期日时我必须更改图形。

我直截了当的解决方案是检查- (void)applicationDidBecomeActive:(UIApplication *)application-(void)viewWillAppear:(BOOL)animated方法,并设置一个计时器,每10分钟检查一天是否已更改为周日,应用程序处于活动状态。

是否还有另一种可能更有效的方法来处理这种情况?

在您的appliciation委托中,实现以下方法: -(void)applicationSignificantTimeChange:(UIApplication *)application

当白天更改时,或者由于任何原因(例如更改时区)在后台更改设备的时间时,将调用此方法。

另一个选择是使用你提到的相同的两种方法,“viewWillAppear:”和“applicationDidBecomeActive:”而不是每10分钟设置一个计时器,只需计算当前时间和下一个星期日之间的时间量。 取这个时间间隔并用它来设置一个定时器,该定时器将在周日的午夜准确发射。

当天发生变化时会有通知。 你可以听它并检查它是否在它发射时是星期天。

您还应该检查它是否在发布时是星期天。

这个解决方案有什么问题? 在某些地方,它是否比每10分钟更频繁地变成星期天?

你可能想要考虑的一件事是:在你的计时器开火方法中,如果时间是在23:50之后,那么更快地重新安排计时器(即大约00:00),这样你就更有可能准确地捕捉到午夜。

本章可能有用,使用某种类型的通知进行更新:

http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

虽然我自己最终得到了您正在使用的相同解决方案,但我发现它更简单,更可靠。