Вы должны сделать это как в didFinishLaunchingWithOptions и didReceiveRemoteNotification, они вызываются в разное время. Первый вызывается, когда приложение полностью закрывается при нажатии на уведомление, второй вызывается, когда приложение открыто и используется.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (launchOptions != nil)
{
NSDictionary *dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary != nil)
{
self.animal_id = [dictionary objectForKey:@"animal_id"];
self.notificationText = [dictionary objectForKey:@"alert"];
self.soundFile = [dictionary objectForKey:@"sound"];
if ([self.animal_id length] > 0) {
NSInteger numberOfBadges = [UIApplication sharedApplication].applicationIconBadgeNumber;
numberOfBadges -=1;
if (numberOfBadges < 0) {
numberOfBadges = 0;
}
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:numberOfBadges];
doNotShowAlert = YES;
[self showPetDetails:self.animal_id];
} else {
doNotShowAlert = NO;
}
}
}
return YES;
}
и здесь:
-(void)application:(UIApplication *)app didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSInteger numberOfBadges = [UIApplication sharedApplication].applicationIconBadgeNumber;
numberOfBadges -=1;
if (numberOfBadges < 0) {
numberOfBadges = 0;
}
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:numberOfBadges];
self.animal_id = [userInfo objectForKey:@"animal_id"];
NSDictionary *aps = [userInfo objectForKey:@"aps"];
self.notificationText = [aps objectForKey:@"alert"];
self.soundFile = [aps objectForKey:@"sound"];
[self showPetDetails:self.animal_id];
}
showPetDetails отправляется в базу данных, чтобы получить подробную информацию для отображения. Когда он есть, он вызывает другой метод для отображения подробного представления:
PetDetailViewController *notificationController = [self.rootNavigationController.storyboard instantiateViewControllerWithIdentifier:@"petdetail"];
notificationController.petDetail = petDetail;
notificationController.currentImage = nil;
[self.rootNavigationController pushViewController:notificationController animated:YES];