Crash when handling remote notification when app not running
Solution 1
I got this resolved, and it has nothing to do with view controllers, as I thought.
The issue was in the following lines. I was sending in remoteNotif.userInfo rather than remoteNotif itself. Also, remoteNotif is obviously not of type UILocalNotification. It is a NSDictionary object.
Before
UILocalNotification *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
[self handleRemoteNotification:application userInfo:remoteNotif.userInfo];
Should be
NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
[self handleRemoteNotification:application userInfo:remoteNotif];
Solution 2
if you close the app which start from xcode debug mode, and when the app start with push notification(closed app) if the your phone connected to mac(still your phone in debug mode with xcode) it will be crash. test this senario with unplugged phone.
Solution 3
You aren't properly initializing your application when receiving a notification. Change the application:didFinishLaunchingWithOptions: method to this:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions {
// Push required screens into navigation controller
NSDictionary *notif= [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
//Accept push notification when app is not open
if (notif) {
[self handleRemoteNotification:application userInfo:notif];
}
return YES;
}
Prasanna
Updated on July 27, 2022Comments
-
Prasanna almost 2 years
I receive a remote notification and according to the type of notification, change navigation controller's view controllers.
It all works fine when the app is in the foreground, or when the app is in the background but not completely closed (from multi-tasking bar).
But, when the app is closed, and receives a remote notification it crashes as soon as it opens. Am I doing wrong with the way I am setting up the ViewControllers?
Here's some code.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Push required screens into navigation controller UILocalNotification *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; //Accept push notification when app is not open if (remoteNotif) { [self handleRemoteNotification:application userInfo:remoteNotif.userInfo]; return YES; } [window addSubview:navigationController.view]; [window makeKeyAndVisible]; return YES; } -(void) handleRemoteNotification:(UIApplication *)application userInfo:(NSDictionary *)userInfo { application.applicationIconBadgeNumber = 0; NSMutableArray *viewControllers = [NSMutableArray array]; [viewControllers addObject:driverWaitViewController]; [viewControllers addObject:newJobsViewController]; [navigationController setViewControllers:viewControllers]; }
-
Prasanna over 13 yearsThanks for your reply Vakio. The issue something else though. Please see how I solved it.
-
vakio over 13 yearsYeah I thought that was weird, but I didn't catch up on it. Sorry.
-
Evils about 10 yearsThis solved my problem for now, but why is that?! Makes no sense for me
-
damithH about 10 yearsAs u said no sense for me also. but i think some connection here with the device and mac.