即使日期是过去,UILocalNotification也会继续开火

时间:2015-01-21 22:49:07

标签: ios swift uilocalnotification

您好,我希望有人可以帮我解决这个问题。我还是ios开发的新手。我正在测试UILocalNotification,我能够设置被激活的一切,但一切正常,但如果过去的那个被点火,那么本地通知就会立即开始。此外,每当我退出应用程序时,通知将再次显示在通知中心。反正是否确保本地通知仅在日期设置为未来时触发?我搜索过但我无法找到答案。任何帮助将不胜感激。

这是viewDidLoad方法中的代码

class ViewController: UIViewController {


    var time : NSDate?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


        var comp = NSDateComponents()
        comp.year = 2015
        comp.month = 01
        comp.day = 20
        comp.hour = 16
        comp.minute = 00
        var calender = NSCalendar.currentCalendar()

        time = calender.dateFromComponents(comp)

        var notification = UILocalNotification()
        notification.alertBody = "this works"
        notification.fireDate = time
        notification.timeZone = NSTimeZone.defaultTimeZone()



        UIApplication.sharedApplication().scheduleLocalNotification(notification)
    }

这是AppDelegate中的代码

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        let notificationType = UIUserNotificationType.Alert | UIUserNotificationType.Badge
        let notificationSetiings = UIUserNotificationSettings(forTypes: notificationType, categories: nil)
        UIApplication.sharedApplication().registerUserNotificationSettings(notificationSetiings)
        return true
    }

2 个答案:

答案 0 :(得分:5)

如果您将fireDate设置为过去日期,则会立即触发通知。 Apple的设计和记录完全符合他们的UILocalNotification documentation

  

fireDate 财产

     

系统发送通知的日期和时间。   声明

     

<强>夫特

     

@NSCopying var fireDate: NSDate?

     

<强>目标C

     

@property(nonatomic, copy) NSDate *fireDate

     

<强>讨论

     

根据中指定的值解释开火日期   timeZone属性。 如果指定的值为nil或者是日期   过去,通知会立即发送。

因此,程序员有责任处理这种情况。您可以做的一件事是,将您要设置的日期与当前日期进行比较。如果不是那就设置它。

答案 1 :(得分:0)

问题是你必须在设置fireDate之前定义本地时区。