hacker hacker - 20 days ago 6
iOS Question

How do I reload the tableview when I am getting the push notification?

I have an iPhone application in which I am adding push notifications.

When I am receiving the push notification I need to go to a particular view where I am loading a table view after calling a web service here. The problem is when I am standing in the same view. If I got a push message I need to reload the tableview both in the foreground and background. But when I am doing that it is not working correctly. How do I achieve this?

- (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;
}
}

Answer

You can try with the local notification NSNotificationCenter to reload your table when a push notification is received.

When a push notification is received then fire your local notification. In your view controller, listen to the local notification and perform the task.

For example:

In your didReceiveRemoteNotification:

[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTheTable" object:nil];

In your ViewController add Observer (in viewDidLoad):

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadTable:) name:@"reloadTheTable" object:nil];

and implement the following method:

- (void)reloadTable:(NSNotification *)notification
{
    [yourTableView reloadData];
}

Also remove observer in viewDidUnload or viewWillDisappear.