Swift 无法从didReceiveLocalNotification重新加载UITable
我的问题是,我收到本地通知,然后告诉我的一个风投更新其UITableView。但是,tableview不会重新加载。我知道所有的if语句检查都通过了,并且它正在运行代码。这最初让我相信这是一个线程问题,所以我将重新加载包装在Swift 无法从didReceiveLocalNotification重新加载UITable,swift,uitableview,uiviewcontroller,uilocalnotification,appdelegate,Swift,Uitableview,Uiviewcontroller,Uilocalnotification,Appdelegate,我的问题是,我收到本地通知,然后告诉我的一个风投更新其UITableView。但是,tableview不会重新加载。我知道所有的if语句检查都通过了,并且它正在运行代码。这最初让我相信这是一个线程问题,所以我将重新加载包装在dispatch\u async(dispatch\u get\u main\u queue(),{})中。然而,这也不起作用。那么,如果它不是一个线程问题,它是什么?这可能是什么原因造成的?我做错什么了吗 func application(application: UIAp
dispatch\u async(dispatch\u get\u main\u 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
}
})
}
}
}
其中fullTabBar在选项卡栏的viewDidLoad
中设置
fullTabBar=self.viewControllers作为[UIViewController]代码>
self
是tabBar实例。很遗憾,我看不出您的代码有任何问题,从逻辑上讲,它应该可以工作。可能是在调用重载数据后更新了数据源,尽管考虑到代码的清洁度,我怀疑情况是否如此
我会尝试下面的模式,只要看看你答案中的代码是否有错误
在SecondViewController的viewDidLoad中:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadTableView:", name: "reloadSecondVCTableView", object: nil)
在身体里:
func reloadTableView(_: NSNotification) {
tableView.reloadData()
}
在您发布的代码中的第二个if语句之后发送通知:
NSNotificationCenter.defaultCenter().postNotificationName("reloadSecondVCTableView", object: nil)
你能在调用重载之前打印vc.myTableView
的值吗?@PhillipMillsvc=Optional()
还有其他代码,例如为UITableView填充数据数组,运行但实际上不会影响它们应该运行的对象。为了使问题尽可能简单化,我省略了这一点。你介意发布你的getVC代码吗?@OlivierWilkinson我非常怀疑它是否返回零或不是正确的VC。看看编辑。啊,该死!嗯,问题一定在别处,那么,您如何更新tableView的数据源?可能在最初加载数据源后打印该数据源,然后在上面的代码中再次打印该数据源,以在调用重载数据之前检查其是否已更改
NSNotificationCenter.defaultCenter().postNotificationName("reloadSecondVCTableView", object: nil)