Fire UILocalNotification in a specific Date

前端 未结 3 1415
太阳男子
太阳男子 2021-01-16 10:32

I want to fire a UILocalNotification in a specific Date. If I use this code:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentif         


        
相关标签:
3条回答
  • 2021-01-16 11:02
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [gregorian components:NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit fromDate:[NSDate date]];
    
    [components setHour:4];
    [components setMinute:0];
    
    NSDate *fireDate = [gregorian dateFromComponents:components];
     NSLog(@"Fire date : %@",fireDate);// Today 4pm is already passed. So you wont get notification 
    
    // You need to check if the time is already passed
    if ([fireDate compare:[NSDate date]] == NSOrderedAscending)
    {
        // Schedule it for next day 4pm
        components.day = components.day+1;
        fireDate = [gregorian dateFromComponents:components];
    }
    NSLog(@"Fire date : %@",fireDate);
    
    0 讨论(0)
  • 2021-01-16 11:09

    In swift 3 - 4 you can use this for specific time local notification.

      func scheduleLocal() {
    
            let dateComponents = DateComponents(year: 2019, month: 1, day: 17, hour: 10, minute: 20)
            let yourFireDate = Calendar.current.date(from: dateComponents)
    
            let notification = UILocalNotification()
            notification.fireDate = yourFireDate
            notification.alertBody = "Hey you! Yeah you! Swipe to unlock!"
            notification.alertAction = "be awesome!"
            notification.soundName = UILocalNotificationDefaultSoundName
            notification.userInfo = ["CustomField1": "w00t"]
            UIApplication.shared.scheduleLocalNotification(notification)
    
            guard let settings = UIApplication.shared.currentUserNotificationSettings else { return }
    
            if settings.types == .none {
                let ac = UIAlertController(title: "Can't schedule", message: "Either we don't have permission to schedule notifications, or we haven't asked yet.", preferredStyle: .alert)
                ac.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
                present(ac, animated: true, completion: nil)
                return
            }
    
        }
    
    0 讨论(0)
  • 2021-01-16 11:11

    Try following code with 24 hour format:-

    NSDate *date = [NSDate date];
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
    NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: date];
    [components setHour:16];
    [components setMinute:0];
    [components setSecond:0];
    
    NSDate *newDate = [gregorian dateFromComponents: components];
    [gregorian release];    
    
    UILocalNotification *localNotif = [[UILocalNotification alloc] init];
    localNotif.fireDate = newDate;
    localNotif.alertBody = [NSString stringWithFormat:@"Alarm for time : %@",newDate];
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
    [localNotif release];
    
    0 讨论(0)
提交回复
热议问题