Local notification not firing in iphone

匿名 (未验证) 提交于 2019-12-03 10:24:21

问题:

In my i'm using a action sheet picker view. It is working fine. But I want to fire a local notification when a particular time is set in time picker, it is not firing the local notification. I used this code:

enter code here        - (void)actionPickerDone {         if (nil != self.data) { //send data picker message[self.target performSelector:self.action     withObject:[NSNumbernumberWithInt:self.selectedIndex]];         } else {     //send date picker message     NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];      // Get the current date     NSDate *pickerDate = [self.datePicker date];     // Break the date up into components     NSDateComponents *dateComponents = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit )                                                     fromDate:pickerDate];     NSDateComponents *timeComponents = [calendar components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )                                                     fromDate:pickerDate];      // Set up the fire time     NSDateComponents *dateComps = [[NSDateComponents alloc] init];     [dateComps setDay:[dateComponents day]];     [dateComps setMonth:[dateComponents month]];     [dateComps setYear:[dateComponents year]];     [dateComps setHour:[timeComponents hour]];     // Notification will fire in one minute     [dateComps setMinute:[timeComponents minute]];     [dateComps setSecond:[timeComponents second]];     NSDate *itemDate = [calendar dateFromComponents:dateComps];     [dateComps release];      UILocalNotification *localNotif = [[UILocalNotification alloc] init];     if (localNotif == nil)         return;     localNotif.fireDate = itemDate;             NSLog(@"%@what is this",itemDate);     localNotif.timeZone = [NSTimeZone defaultTimeZone];             NSLog(@"i8i8i88i");      // Notification details     //localNotif.alertBody = [eventText text];     // Set the action button     localNotif.alertAction = @"View";      localNotif.soundName = UILocalNotificationDefaultSoundName;     localNotif.applicationIconBadgeNumber = 1;      // Specify custom data for the notification     NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"];     localNotif.userInfo = infoDict;      // Schedule the notification     [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];     [localNotif release];     } 

Is there any thing wrong in this code.please help me.

回答1:

I executed your code and the notification didnt fire. Then I uncommented the localNotif.alertBody assignment statement and it did fire. Local notification will not appear as an alert if you do not specify an alertBody. Plus the point raised by Idan is also valid. If your app is in foreground the notif wont be displayed rather you will get a callback in your app delegate in which you should display an alert with the message notification.alertBody for consistency.

Hope this helps :)

PS you dont need all the calender components thing youre doing. Log both of them and youll see that both pickerDate and itemDate are same.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!