当我收到推送通知时,如何重新加载tableview?

时间:2012-07-20 06:45:44

标签: iphone ios ipad

我有一个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;
    }
}

3 个答案:

答案 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];
}

同时删除viewDidUnloadviewWillDisappear中的观察者。

答案 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