2016-09-21 2 views
1

я делал уведомление и смотреть учебник по ней, и когда я напечатал:Как сделать timeIntervalSinceNow в Swift3?

notification.fireDate = NSDate(timeIntervalSinceNow: 0) 

это говорит

Аргумент метка '(timeIntervalSinceNow :) не найдена доступные перегрузок

Как исправить это? Вот мой код:

import UIKit 
import UserNotifications 

class ViewController: UIViewController { 
    var timer = Timer() 
    var time = 10 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: Selector(("Notification")), userInfo: nil, repeats: true) 
     // Do any additional setup after loading the view, typically from a nib. 
    } 
    func notification() { 
     time -= 1 
     if time <= 0 { 
      let notification = UILocalNotification() 
      notification.alertAction = "Call" 
      notification.alertBody = "You have a call right now" 
      notification.fireDate = NSDate(timeIntervalSinceNow: 0) 
      UIApplication.shared.scheduleLocalNotification(notification) 
      timer.invalidate() 
     } 
    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
    @IBAction func pushNotification(_ sender: AnyObject) { 
     let AlertView = UIAlertController(title: "Time for your call!", message: "Press go to continue", preferredStyle: .alert) 
     AlertView.addAction(UIAlertAction(title: "Go", style: .default, handler: nil)) 
     self.present(AlertView, animated: true, completion: nil) 
    } 
} 
+0

Но тогда он говорит, что я должен сделать это 'notification.fireDate = NSDate() как Date', а затем он не работает. –

+0

@LeoDabus. Я не получаю сообщение об ошибке, когда я делаю то, что вы сказали, но я получаю Thread 1: сигнал SIGABRT –

+0

@LeoDabus, где я должен это поставить? –

ответ

1

Если вы хотите, дата огонь будет сейчас, это просто:

notification.fireDate = Date() 

Как Лео уже отмечалось, селектор некорректен. Оно должно быть:

weak var timer: Timer? 
var time = 10 

override func viewDidLoad() { 
    super.viewDidLoad() 

    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleTimer(_:)), userInfo: nil, repeats: true) 
} 

func handleTimer(_ timer: Timer) { 
    time -= 1 

    if time <= 0 { 
     let notification = UILocalNotification() 

     notification.alertAction = "Call" 
     notification.alertBody = "You have a call right now" 
     notification.fireDate = Date() 

     UIApplication.shared.scheduleLocalNotification(notification) 

     timer.invalidate() 
    } 
} 

Вы потом спросил:

, что, безусловно, работает, но теперь я не получаю уведомление, когда я оставить приложение

Вы не получите когда вы покидаете приложение, потому что Timer не продолжает работать, когда приложение не работает. Лучше всего полностью устранить таймер и сразу же запланировать местное уведомление в течение требуемого времени. Например, чтобы запланировать местное уведомление огня в течение 10 секунд:

override func viewDidLoad() { 
    super.viewDidLoad() 

    scheduleLocalNotification(delay: 10) 
} 

func scheduleLocalNotification(delay: TimeInterval) { 
    let notification = UILocalNotification() 

    notification.alertAction = "Call" 
    notification.alertBody = "You have a call right now" 
    notification.fireDate = Date().addingTimeInterval(delay) 

    UIApplication.shared.scheduleLocalNotification(notification) 
} 
+0

@LeoDabus уже сказал это, но когда я набираю это, я получаю сообщение «Thread 1: SIGABRT» –

+2

Да, это потому, что ваш селектор ошибочен, как указывал Лео. – Rob

1

Swift 3

let minute:TimeInterval = 11.0 * 60.0; 
Date(timeIntervalSinceNow: minute); 

на +11 минут до наших дней.