我正在构建一个应用程序来跟踪BLE设备,我有一个委托(在appDelegate中)通过蓝牙更新已发现设备的列表。
我需要在tableview中显示这些设备,所以当我发现一个设备时,我在viewcontroller中调用一个刷新tableView的函数。
如果我从ViewController调用此函数它可以工作,但是当我从AppDelegate调用它时它不会做任何事情,甚至不会出错。
AppDelegate中:
//MARK: Discovered Device
func DeviceDiscovered(_ macAddress: String!, withName name: String!, ofType type: Int, andSignalStrength strength: Int) {
discoveredList["\(entry["time"]!)"] = entry
ViewController().refresh()
}
}
视图控制器:
func refresh() {
self.tableView?.reloadSections(NSIndexSet(index: _sectionIndices.discoveredDevices.hashValue) as IndexSet, with: .none)
}
我在ViewController中添加了一个按钮,只需调用refresh()就可以了。或者至少它会重新加载该部分,但是在ViewController中,既没有更新,也没有更新,但是一次出现一个问题!
谢谢你的帮助!
问题是ViewController()
不是你的视图控制器。这是一个新的独立实例。您需要参考现有的视图控制器。
所以,正如@matt所指出的,问题是我在AppDelegate中实例化一个新的ViewController,所以为了解决这个问题,我做了:
let navController = self.window?.rootViewController as! UINavigationController
newViewController = navController.visibleViewController as! ViewController
据我所知,从导航控制器中拉出对现有ViewController的引用。
然后参考
newViewController.refresh()
正确更新tableView。
我欢迎任何改进,以改善这一点,但现在我的代码工作正常!感谢大家的帮助。