我有一个iPhone应用程序,我在其中添加推送通知。
当我收到推送通知时,我需要在此处调用web service后转到我正在加载表视图的特定视图。问题是当我站在同一个观点时。如果我收到推送消息,我需要在前台和后台重新加载tableview。但是,当我这样做时,它无法正常工作。我如何实现这一目标?
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSLog(@"########################################didReceiveRemoteNotification****************************###################### %@",userInfo);
// Check application in forground or background
if (application.applicationState == UIApplicationStateActive)
{
if (tabBarController.selectedIndex==0)
{
NSArray *mycontrollers = self.tabBarController.viewControllers;
NSLog(@"%@",mycontrollers);
[[mycontrollers objectAtIndex:0] viewWillAppear:YES];
mycontrollers = nil;
}
tabBarController.selectedIndex = 0;
//NSLog(@"FOreGround");
//////NSLog(@"and Showing %@",userInfo)
}
else {
tabBarController.selectedIndex = 0;
}
}
答案 0 :(得分:36)
您可以尝试使用本地通知NSNotificationCenter
在收到推送通知时重新加载您的表格。
收到推送通知后,会触发您的本地通知。在视图控制器中,侦听本地通知并执行任务。
例如:
在didReceiveRemoteNotification中:
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTheTable" object:nil];
在ViewController中添加观察者(在viewDidLoad
中):
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadTable:) name:@"reloadTheTable" object:nil];
并实现以下方法:
- (void)reloadTable:(NSNotification *)notification
{
[yourTableView reloadData];
}
同时删除viewDidUnload
或viewWillDisappear
中的观察者。
答案 1 :(得分:4)
Swift 3版本:
在didReceiveRemoteNotification 中
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "reloadTheTable"), object: nil)
在ViewController中添加Observer(在viewDidLoad中):
NotificationCenter.default.addObserver(self, selector: #selector(self.reloadTable), name: NSNotification.Name(rawValue: "reloadTheTable"), object: nil)
并在viewWillDissapear
中 NotificationCenter.default.removeObserver("reloadTheTable")
答案 2 :(得分:1)
Swift 4版本: 在didReceiveRemoteNotification
中NotificationCenter.default.post(name: Notification.Name(rawValue: "reloadEventsTable"), object: nil)
在ViewController中添加观察者(在viewDidLoad中):
NotificationCenter.default.addObserver(self, selector: #selector(onReloadEventsTable), name: Notification.Name(rawValue: "reloadEventsTable"), object: nil)
关于删除观察者,我曾经在deinit()中这样做,但是很有趣的是,从iOS 9开始,如果您不使用基于块的观察者,则无需自己删除观察者。 https://stackoverflow.com/a/40339926/3793165