Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 设置每天午夜的本地通知_Ios_Swift_Notifications_Xcode6_Uilocalnotification - Fatal编程技术网

Ios 设置每天午夜的本地通知

Ios 设置每天午夜的本地通知,ios,swift,notifications,xcode6,uilocalnotification,Ios,Swift,Notifications,Xcode6,Uilocalnotification,我正在尝试创建一个简单的通知,它将在每天午夜出现。这是我使用的代码: func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. application.re

我正在尝试创建一个简单的通知,它将在每天午夜出现。这是我使用的代码:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert | UIUserNotificationType.Badge, categories: nil))

    var thisDate = NSDateComponents()
    thisDate.hour = 0
    thisDate.minute = 0
    thisDate.second = 0

    var calender = NSCalendar()

    var localNotification:UILocalNotification = UILocalNotification()
    localNotification.timeZone = NSTimeZone.localTimeZone()
    localNotification.fireDate = calender.dateFromComponents(thisDate)
    localNotification.repeatInterval = .CalendarUnitDay
    localNotification.alertAction = "Open App"
    localNotification.alertBody = "Here is the seven o'clock notification"
    localNotification.soundName = UILocalNotificationDefaultSoundName
    localNotification.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1
    UIApplication.sharedApplication().scheduleLocalNotification(localNotification)

    return true
}    
我不明白为什么它不起作用,知道吗?

试着为日期组件设置日期、月份和年份:

var thisDate = NSDateComponents()
thisDate.hour = 0
thisDate.minute = 0
thisDate.second = 0

您的代码存在许多问题,因此我将通过以下代码注释进行解释:

import UIKit
class ViewController: UIViewController {
    @IBOutlet weak var midnightSwitch: UISwitch!
    // you should declare your vars here
    let localNotificationDailyAt12am = UILocalNotification()
    // you should declare your funcions here
    // you have to register the user notifications settings options (badge, alert and sound if desired)
    func setUIUserNotificationOptions() {
        UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Badge | UIUserNotificationType.Sound | UIUserNotificationType.Alert, categories: nil))
    }
    // now lets setup your notification
    func notificationsOptions12am() {
        // defines localtime
        localNotificationDailyAt12am.timeZone = NSTimeZone.localTimeZone()
        // confirms the alert dialog box action
        localNotificationDailyAt12am.hasAction = true
        // defines the notification alert body text
        localNotificationDailyAt12am.alertBody = "The midnight notification message"
        // defines the daily time interval
        localNotificationDailyAt12am.repeatCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
        localNotificationDailyAt12am.repeatInterval = .CalendarUnitDay
        // defines the notification alert button text
        localNotificationDailyAt12am.alertAction = "Open App"
        // defines the default sound for your notification
        localNotificationDailyAt12am.soundName = UILocalNotificationDefaultSoundName
        // increments the badge counter
        localNotificationDailyAt12am.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1
        // defines your firedate tomorrow at 12am ( note: extension NSDate tomorrowAt12am at the bottom )
        localNotificationDailyAt12am.fireDate = NSDate().tomorrowAt12am
        // lets set it up
        UIApplication.sharedApplication().scheduleLocalNotification(localNotificationDailyAt12am)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        setUIUserNotificationOptions()
        notificationsOptions12am()

    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    @IBAction func switched(sender: AnyObject) {
        localNotificationDailyAt12am.fireDate = midnightSwitch.on ?
            NSDate().tomorrowAt12am :                                // tomorrow at 12am
                NSDate().dateByAddingTimeInterval(3155673600)        // will never fire (100 years from now)
    }
}
extension NSDate {
    var day:   Int { return NSCalendar.currentCalendar().components(.Day,   fromDate: self).day   }
    var month: Int { return NSCalendar.currentCalendar().components(.Month, fromDate: self).month }
    var year:  Int { return NSCalendar.currentCalendar().components(.Year,  fromDate: self).year  }
    var tomorrowAt12am: NSDate {
        return  NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day+1, hour: 0, minute: 0, second: 0, nanosecond: 0)!
    }
}

它不会显示任何通知