从AppDelegate调用重新加载部分

时间:2018-03-05 21:22:01

标签: ios swift

我正在构建一个跟踪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中,既没有更新,也没有更新,但一次只有一个问题!

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

问题是ViewController()不是您的视图控制器。这是一个新的独立实例。您需要引用到现有的视图控制器。

答案 1 :(得分:0)

所以,正如@matt所指出的,问题是我在AppDelegate中实例化了一个新的ViewController,所以为了解决这个问题,我做了:

let navController       = self.window?.rootViewController as! UINavigationController

newViewController       = navController.visibleViewController as! ViewController

,据我所知,从导航控制器中拉出对现有ViewController的引用。

然后参考

newViewController.refresh()

正确更新tableView。

我欢迎任何改进以改善这一点,但是现在我的代码正在运行!感谢大家的帮助。