使用NSTimer调用函数

因此,如下所示的代码,功能loadView 3应该在用户点击按钮300秒(5分钟)后运行。但是,当我构建并运行时,事实并非如此。我还做了一些实验,我将计时器更改为5秒,它可以正常工作。因此,从iOS系统暂停该应用程序后,NSTimer不再运行了吗?那么问题是什么,我该如何解决?

@IBAction func buttonTapped(sender: AnyObject) {
    NSTimer.scheduledTimerWithTimeInterval(300, target: self, selector: #selector(ViewController.loadView3), userInfo: nil, repeats: false)    
    createLocalNotification()
}

func createLocalNotification() {
    let localnotification = UILocalNotification()
    localnotification.fireDate = NSDate(timeIntervalSinceNow: 300)
    localnotification.applicationIconBadgeNumber = 1
    localnotification.soundName = UILocalNotificationDefaultSoundName
    localnotification.alertBody = "Hello!"
    UIApplication.sharedApplication().scheduleLocalNotification(localnotification)
}

func loadView3() {
    label.text = "e89saa"
}
露比利斯

您可以尝试这样的事情。该方法是,如果计时器工作以相同的逻辑进行,否则(可能是应用程序被杀死或进入后台),请保存firedDate并更新UI,然后在viewWillAppear方法中显示控制器。

@IBAction func buttonTapped(sender: AnyObject) {
    NSTimer.scheduledTimerWithTimeInterval(300, target: self, selector: #selector(ViewController.loadView3), userInfo: nil, repeats: false)    
    createLocalNotification()
}

func createLocalNotification() {
    let localnotification = UILocalNotification()
    localnotification.fireDate = NSDate(timeIntervalSinceNow: 300)
    localnotification.applicationIconBadgeNumber = 1
    localnotification.soundName = UILocalNotificationDefaultSoundName
    localnotification.alertBody = "Hello!"
    UIApplication.sharedApplication().scheduleLocalNotification(localnotification)

    // save in UserDefaults fireDate
    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.setObject(localnotification.fireDate, forKey: "firedDate")
    defaults.synchronize()
}

func loadView3() {
    // reset in UserDefaults fireDate
    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.removeObjectForKey("firedDate")
    defaults.synchronize()

    label.text = "e89saa"
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated) // No need for semicolon

    // retrieve fireDate from UserDefaults
    let defaults = NSUserDefaults.standardUserDefaults()
    let fireDate = defaults.objectForKey("firedData")

    // check if we should update UI
    if let _ = fireDate as? NSDate! {
        if currentDate.compare(firedDate) == NSComparisonResult.OrderedDescending {
            loadView3()
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章