您好,我希望有人可以帮我解决这个问题。我还是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
}
答案 0 :(得分:5)
如果您将fireDate设置为过去日期,则会立即触发通知。 Apple的设计和记录完全符合他们的UILocalNotification documentation。
fireDate
财产系统发送通知的日期和时间。 声明
<强>夫特强>
@NSCopying var fireDate: NSDate?
<强>目标C 强>
@property(nonatomic, copy) NSDate *fireDate
<强>讨论强>
根据中指定的值解释开火日期 timeZone属性。 如果指定的值为nil或者是日期 过去,通知会立即发送。
因此,程序员有责任处理这种情况。您可以做的一件事是,将您要设置的日期与当前日期进行比较。如果不是那就设置它。
答案 1 :(得分:0)
问题是你必须在设置fireDate之前定义本地时区。