分析:
(a)如果程序没有在后台运行 而是彻底退出的时候 点击推送消息进入应用,这个方法的launchOptions 会有值
NSDictionary
* userInfo = [launchOptions
objectForKey
:
UIApplicationLaunchOptionsRemoteNotificationKey
];
- (
BOOL
)application:(
UIApplication
*)application didFinishLaunchingWithOptions:(
NSDictionary
*)launchOptions
(b)如果程序处于正在运行或者是后台状态时,在这个方法的userInfo会获得值
- (
void
)application:(
UIApplication
*)application didReceiveRemoteNotification:(
NSDictionary
*)userInfo;
1.
如果跳转的是导航视图(一般是从主页向后面的页面跳转)
其中home是主页
if
([userInfo[
@"msg_type"
]
isEqualToString
:
@"film"
]) {
MovieDetailViewController
*movie = [[
MovieDetailViewController
alloc
]
init
];
movie.
id
= [
NSString
stringWithFormat
:
@"%d"
,[userInfo[
@"id"
]
intValue
]];
[
home
.
navigationController
pushViewController
:movie
animated
:
YES
];
}
2.
如果不是,使用NotificationCenter 推一个通知给需要跳转的类,接收这个通知的类,接收后处理该跳转到哪个视图(通知传值)
-(
void
)goMovie{
MovieDetailViewController *movieDetail = [[ MovieDetailViewController alloc ] init ];
movieDetail. id = id ;
[ self . navigationController pushViewController :movieDetail animated : YES ];
MovieDetailViewController *movieDetail = [[ MovieDetailViewController alloc ] init ];
movieDetail. id = id ;
[ self . navigationController pushViewController :movieDetail animated : YES ];
}
特别推荐:
每次跳转时可以先跳转回rootVC,然后执行跳转。
//普通推送 直接返回home
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
[navigationController popToRootViewControllerAnimated:NO];
UpComingMovieDetailVC *movie = [[UpComingMovieDetailVC alloc] init];
movie.movieId = [NSString stringWithFormat:@"%@",_userInfoDict[@"id"]];
[home.navigationController pushViewController:movie animated:YES];