У меня есть приложение, которое должно загружает ViewController когда приходит дистанционное уведомление толчок, у меня есть этот код в настоящее время в моем appDelegate.m:Реализовать didReceiveRemoteNotification, чтобы показать новый ViewController, когда дело доходит
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"REMOTE NOTIFICATION %@", userInfo);
if([[MTMAPIClient sharedClient] isLoggedIn: nil]){
if (userInfo && userInfo[@"aps"] && userInfo[@"aps"][@"extra"]) {
if (application.applicationState == UIApplicationStateActive) {
[self playSound];
}
}
[NotificationHelper pushNotificationCame:userInfo view:self.tabBarController.selectedViewController];
}
}
Мое приложение (например, AppStore и iTunes), в котором я сохраняю ссылку на UITabBarController в своем приложении appDelegate.
Мой Уведомление Helper код:
+ (void) pushNotificationCame:(NSDictionary*)userInfo view:(UINavigationController*) viewController
{
NSString* otp;
if (userInfo && userInfo[@"aps"] && userInfo[@"aps"][@"extra"]) {
otp = (NSString*)userInfo[@"aps"][@"extra"][@"otp"];
[Authorization loadAuthByOtp:otp
success:^(Authorization *auth) {
dispatch_async(dispatch_get_main_queue(), ^{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryBoard" bundle:[NSBundle mainBundle]];
TransactionDetailViewController* appTransactionDetailsView = [storyboard instantiateViewControllerWithIdentifier:@"transactionDetails"];
appTransactionDetailsView.authorization = auth;
[viewController pushViewController:appTransactionDetailsView animated:YES];
});
} failure:^(NSString *error, ErrorType errorType) {
NSLog(@"pushNotificationCame loadAuthByOtp failed with error: %@", error);
}];
}
}
Это работает в 70% случаях, но иногда, когда я выйти из приложения и подписать обратно, когда толчок уведомление приходит self.tabBarController.selectedViewController и " viewController "в методе pushNotificationCame не является текущим активным видом в моей панели вкладок, поэтому PushViewController не работает.
Другими словами, в моей вкладке приложения A, B, C есть три вкладки, когда появляется push-уведомление. Я нахожусь на вкладке A, но self.tabBarController.selectedViewController в отладчике является B viewController, поэтому, когда я нажимаю новый viewController, он идет на вкладку B, и ничего не происходит. нет ошибки, но нет нового viewController. это происходит только тогда, когда я выхожу и пью обратно в приложение, как правило, это просто работает!
Мой Выход код:
[viewController.navigationController.tabBarController performSegueWithIdentifier:@"logoutSegue" sender:viewController];
и мой знак в коде:
[self performSegueWithIdentifier:@"fromSignInToApplications" sender:self];
который переводит пользователя на первой вкладке в TabBarController.
и AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.tabBarController = (UITabBarController *)self.window.rootViewController;
}
Что вы будете делать, когда вы выйдете из системы/войдите в систему? Правильно ли 'self.tabBarController'? – Wain
@Wain Я отредактировал сообщение, чтобы включить детали, которые вы просили. –