Reputation: 75
i'm trying to update my app to iOS 8. In a function i schedule a local notification (i've already checked that firedate and all other parts of the notification are right) in this way:
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
then i use this code to print the scheduled local notification:
NSLog(@"notifications %@", [UIApplication sharedApplication].scheduledLocalNotifications );
but the array
[UIApplication sharedApplication].scheduledLocalNotifications
is empty even if the notification is not fired. Then , to check if the local notification is really scheduled, i tried to use the code
NSLog(@"notification appdelegate %@", application.scheduledLocalNotifications );
in the function
- (void)applicationWillResignActive:(UIApplication *)application
of Appdelegate.m
in this case, the array of the scheduled local notifications is not empty and the NSLog function print the correct notification. This happens only on real devices, in the simulator my app works fine. And the problem is not to check the permission of the user to schedule local notifications, cause i've already faced it. Could someone help me? some ideas?
Upvotes: 6
Views: 8847
Reputation: 1510
I am facing same issue and Finally I got solution why its happened.
if your are not set fireDate in notification object. its work perfect but when you are try to get notification list its always blank.
here is notification object without set fire date
<UIConcreteLocalNotification: 0x7fc1637aedb0>{fire date = (null), time zone = Asia/Kolkata (GMT+5:30) offset 19800, repeat interval = 0, repeat count = UILocalNotificationInfiniteRepeatCount, next fire date = Tuesday, September 5, 2017 at 3:31:44 PM India Standard Time, user info = (null)}
here is notification object with fire date
<UIConcreteLocalNotification: 0x7f96715d0ff0>{fire date = Tuesday, September 5, 2017 at 3:35:17 PM India Standard Time, time zone = Asia/Kolkata (GMT+5:30) offset 19800, repeat interval = 0, repeat count = UILocalNotificationInfiniteRepeatCount, next fire date = Tuesday, September 5, 2017 at 3:35:17 PM India Standard Time, user info = (null)}
here is code you can comment fire date and check its different
let localNotification = UILocalNotification()
**//Comment ..firedate and test it**
localNotification.fireDate = NSDate(timeIntervalSinceNow: 5)
localNotification.alertBody = "new Blog Posted at iOScreator.com"
localNotification.timeZone = NSTimeZone.defaultTimeZone()
localNotification.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
print(localNotification)
for notification in UIApplication.sharedApplication().scheduledLocalNotifications! as [UILocalNotification] {
print(notification)
}
Upvotes: 0
Reputation: 5107
Once Local notification is fired for given date it won't show details in [UIApplication sharedApplication].scheduledLocalNotifications array. So if you give some interval count to fireDate (from CurrentDate to 10~20s) it will show you the details.
Upvotes: 0
Reputation: 2474
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.alertAction = @"Testing notifications on iOS8";
localNotification.alertBody = @"Woww it works!!";
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow: 30];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
var localNotification:UILocalNotification = UILocalNotification()
localNotification.alertAction = "Testing notifications on iOS8"
localNotification.alertBody = "Woww it works!!
localNotification.fireDate = NSDate(timeIntervalSinceNow: 30)
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]]
return YES;
}
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool
{
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound|UIUserNotificationType.Alert |UIUserNotificationType.Badge, categories: nil)
return true
}
Upvotes: 4
Reputation: 4573
This is not iOS 8 issue, but
[UIApplication sharedApplication].scheduledLocalNotifications
issue. Most relevant answer which i found here
Having similar issues right now. My guess here is that iOS does not schedule the notifications immediately but only at the end of the current run loop. I am running into these problems when setting the scheduledLocalNotifications property several times in the same run loop and changes don't seem to be updated accordingly. I think I will just keep a copy of the local notifications array myself and only set scheduledLocalNotifications and never read it.
Upvotes: 12