iOS – 我怎样才能安排一天一次的东西?

我知道有NSTimer.scheduledTimerWithInterval

这是这样使用的:

 override func viewDidLoad() { super.viewDidLoad() var timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: Selector("update"), userInfo: nil, repeats: true) } func update() { // Something cool } 

但是我认为var timer所在的视angular也必须是活的,也就是:不能closures视图(对吗?)

我怎样在iOS中每天安排一些东西,例如:每天晚上8点发送通知?

Android我通过以下方式实现了这一点:

  1. 我已经使用了一个名为AlarmManager ,它与iOS的scheduledTimerWithInterval类似,但是在后台服务中运行的时间间隔很大

  2. 在启动(引导),有另一个后台服务,再次设置警报。 这涵盖了Android设备closures的情况(所以后台服务也closures了)

所以,在iOS中,是否有类似scheduledTimerWithInterval的大间隔?

如果iPhone / iPad重新启动,是否需要再次设置间隔?

是的,要使用NSTimer ,应用程序必须在前台或后台运行。 但是,苹果公司特别只允许某些types的应用程序继续在后台运行(为了确保我们没有任何应用程序随意运行自己的特权,并在此过程中杀死我们的电池和/或影响我们的性能同时使用该设备)。

  1. 当你说“通知”,你真的是指通知用户的东西?

    在这种情况下,这里的替代方法是创build一个UILocalNotification ,它是一个用户通知(假设他们已经授予您的应用程序执行通知的权限),即使您的应用程序未运行时也会显示该通知。

    例如,要注册本地通知:

     let application = UIApplication.sharedApplication() let notificationTypes: UIUserNotificationType = .Badge | .Sound | .Alert let notificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil) application.registerUserNotificationSettings(notificationSettings) 

    然后安排重复通知:

     let notification = UILocalNotification() notification.fireDate = ... notification.alertTitle = ... notification.alertBody = ... notification.repeatInterval = .CalendarUnitDay application.scheduleLocalNotification(notification) 

    有关更多信息,请参阅本地和远程通知编程指南 。

  2. 或者你的意思是启动一些进程,比如从远程服务器获取数据。

    如果您希望应用程序获取数据,即使您的应用程序未运行,也可以使用后台获取。 请参阅适用于iOS应用程序编程指南中的获取小量内容

    请注意,通过后台获取,您不指定何时要检索数据,而是系统会在自己select的时间检查数据。 据报道,考虑因素包括用户使用应用的频率,请求查看是否有数据导致实际存在新数据检索的频率等。您无法直接控制这些后台提取的时间。