我的问题是我收到本地通知,然后告诉我的一个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实例。
答案 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)