首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未从LocalNotification.fireDate收到通知

未从LocalNotification.fireDate收到通知
EN

Stack Overflow用户
提问于 2014-12-10 17:29:55
回答 1查看 1.4K关注 0票数 1

为什么在按下按钮后不显示通知呢?

如果fireDate是NSDate(timeIntervalSinceNow: 10),它就能正常工作。

如何从数组中获得通知?

代码语言:javascript
复制
    @IBAction func buttonPressed(sender: AnyObject) {

    var stringDate = dateFormatter.stringFromDate(timePicker.date)
    alarmArray.append(stringDate)

    let fixedAlarmArray = alarmArray
    NSUserDefaults.standardUserDefaults().setObject(fixedAlarmArray, forKey: "alarmArray")
    NSUserDefaults.standardUserDefaults().synchronize()


    //Local Notification
    var localNotification:UILocalNotification = UILocalNotification()
    localNotification.alertAction = "Go to app"
    localNotification.alertBody = "Its Time!"
    localNotification.fireDate = timePicker.date
    localNotification.timeZone = NSTimeZone.defaultTimeZone()
    UIApplication.sharedApplication().scheduleLocalNotification(localNotification)

    self.view.endEditing(true)

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-10 18:52:48

fireDate中指定的日期将根据此属性的值进行解释。如果您指定了“零”(默认值),那么火日期将被解释为一个绝对的格林尼治时间,这适用于诸如倒计时计时器之类的情况。如果将有效的NSTimeZone对象分配给此属性,则将火日期解释为在时区发生更改时自动调整的挂钟时间;适合这种情况的示例是闹钟。

代码语言:javascript
复制
localNotification.fireDate = timePicker.date
localNotification.timeZone = NSTimeZone.defaultTimeZone()
// the problem is here, you are setting the timezone after inputing your date

您应该使用localtimeZone并在设置fireDate之前设置它。

代码语言:javascript
复制
localNotification.timeZone = NSTimeZone.localTimeZone()
localNotification.fireDate = timePicker.date

注意:

在iOS 8及更高版本中,使用本地或远程通知的应用程序必须注册它们打算传递的通知类型。然后,系统允许用户限制应用程序显示的通知类型。如果没有为应用程序启用这些通知类型,系统将不显示图标、显示警报消息或播放警报声音,即使这些通知类型是在通知有效负载中指定的。

就像这样:

代码语言:javascript
复制
UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Badge | UIUserNotificationType.Sound | UIUserNotificationType.Alert, categories: nil))

创建一个扩展,将所选择的时间与0秒合并,如下所示:

代码语言:javascript
复制
extension NSDate {

    var day:            Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitDay,           fromDate: self).day           }
    var month:          Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitMonth,         fromDate: self).month         }
    var year:           Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitYear,          fromDate: self).year          }
    var minute:         Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitMinute,        fromDate: self).minute }
    var hour:           Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitHour,          fromDate: self).hour   }

    var fireDate: NSDate {
        return NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day, hour: hour, minute: minute, second: 0, nanosecond: 0)!
    }
}

然后使用它,如下所示:

代码语言:javascript
复制
localNotification.fireDate = timePicker.date.fireDate
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27407245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档