我正在构建一个跟踪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()
}
}
的ViewController:
func refresh() {
self.tableView?.reloadSections(NSIndexSet(index: _sectionIndices.discoveredDevices.hashValue) as IndexSet, with: .none)
}
我在ViewController中添加了一个按钮,只需调用refresh()即可。或者至少它会重新加载该部分,但是在FindController中,既没有更新,也没有更新,但一次只有一个问题!
感谢您的帮助!
答案 0 :(得分:1)
问题是ViewController()
不是您的视图控制器。这是一个新的独立实例。您需要将引用到现有的视图控制器。
答案 1 :(得分:0)
所以,正如@matt所指出的,问题是我在AppDelegate中实例化了一个新的ViewController,所以为了解决这个问题,我做了:
let navController = self.window?.rootViewController as! UINavigationController
newViewController = navController.visibleViewController as! ViewController
,据我所知,从导航控制器中拉出对现有ViewController的引用。
然后参考
newViewController.refresh()
正确更新tableView。
我欢迎任何改进以改善这一点,但是现在我的代码正在运行!感谢大家的帮助。