无法从didReceiveLocalNotification

时间:2016-04-14 17:06:56

标签: swift uitableview uiviewcontroller uilocalnotification appdelegate

我的问题是我收到本地通知,然后告诉我的一个VC更新其UITableView。但是,tableview不会重新加载。我知道所有if语句检查都在传递,并且它正在运行代码。这最初让我相信这是一个线程问题,因此我将重新加载包装在dispatch_async(dispatch_get_main_queue(), {})中。然而,这也不起作用。那么,如果它不是一个线程问题是什么呢?可能是什么导致了这个?我在这里做错了吗?

func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {
    if notification.alertBody != nil{
        if notification.alertBody!.hasSuffix("starting") || notification.alertBody!.hasSuffix("ending"){
            dispatch_async(dispatch_get_main_queue(), {
                if topMostContoller() is SecondViewController{
                    let vc = self.tabBarController?.getVC(.Attendance) as! SecondViewController
                    vc.myTableView?.reloadRowsAtIndexPaths((vc.myTableView?.indexPathsForVisibleRows)!, withRowAnimation: .None)
    //              vc.myTableView?.reloadData() <- this doesn't work either
                }
            })
        }
    }
}

编辑:

func getVC(vc:tabBarVC)->UIViewController?{
    switch vc{
    case .Home:
        return fullTabBar[0]
    case .Attendance:
        return fullTabBar[1]
    case .Location:
        return fullTabBar[2]
    case .Sign:
        return fullTabBar[3]
    case .Settings:
        return fullTabBar[4]
    }
}

在tabBar的viewDidLoad中设置了fullTabBar。

fullTabBar = self.viewControllers as [UIViewController]!

self是tabBar实例。

1 个答案:

答案 0 :(得分:0)

我很遗憾看不到您的代码有任何问题,从逻辑上说它应该正常工作。在调用reloadData之后,您的数据源可能正在更新,但考虑到代码的清洁度,我怀疑是这种情况。

如果只是为了查看答案中的代码是否有问题,我会尝试以下模式。

在SecondViewController的viewDidLoad中:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadTableView:", name: "reloadSecondVCTableView", object: nil)

在身体里:

func reloadTableView(_: NSNotification) {
    tableView.reloadData()
}

在您发布的代码中的第二个if语句之后发送通知:

NSNotificationCenter.defaultCenter().postNotificationName("reloadSecondVCTableView", object: nil)