7

我有一个 iPhone 应用程序,我在其中添加推送通知。

当我收到推送通知时,我需要在此处调用Web 服务后转到要加载表格视图的特定视图。问题是当我站在同一个视图中时。如果我收到推送消息,我需要在前台和后台重新加载 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;
    }
}
4

3 回答 3

37

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

同时删除viewDidUnloador中的观察者viewWillDisappear

于 2012-07-20T07:08:32.787 回答
4

斯威夫特 3 版本:

在 didReceiveRemoteNotification

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "reloadTheTable"), object: nil)

在您的 ViewController 添加观察者(在 viewDidLoad 中):

NotificationCenter.default.addObserver(self, selector: #selector(self.reloadTable), name: NSNotification.Name(rawValue: "reloadTheTable"), object: nil)

并在视图中将消失

 NotificationCenter.default.removeObserver("reloadTheTable")
于 2017-03-20T14:17:17.980 回答
3

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

于 2018-10-30T11:01:43.913 回答