从AppDelegate调用重新加载部分

问题描述 投票:0回答:2

我正在构建一个应用程序来跟踪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中,既没有更新,也没有更新,但是一次出现一个问题!

谢谢你的帮助!

ios swift
2个回答
1
投票

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


0
投票

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

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

newViewController       = navController.visibleViewController as! ViewController

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

然后参考

newViewController.refresh()

正确更新tableView。

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

© www.soinside.com 2019 - 2024. All rights reserved.