gpt4 book ai didi

swift - 无法从 didReceiveLocalNotification 重新加载 UITable

转载 作者:行者123 更新时间:2023-11-30 13:30:23 24 4
gpt4 key购买 nike

我的问题是我收到本地通知,然后告诉我的一位 VC 更新其 UITableView。但是,表格 View 不会重新加载。我知道所有 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]
}
}

其中 fullTabBar 在 tabBar 的 viewDidLoad 中设置。

fullTabBar = self.viewControllers 作为 [UIViewController]!

self 是 tabBar 实例。

最佳答案

不幸的是,我看不出您的代码有任何问题,从逻辑上讲它应该可以工作。可能您的数据源在调用 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)

关于swift - 无法从 didReceiveLocalNotification 重新加载 UITable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36629605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com