【发布时间】:2018-03-05 21:22:01
【问题描述】:
我正在构建一个应用程序来跟踪 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 中的 foundList dict 也不会更新,而是一次出现一个问题!
感谢您的帮助!
【问题讨论】:
-
每次需要刷新时都创建一个新的控制器实例有什么原因吗?
-
不抱歉,这只是我正在尝试的东西,我使用 self 访问 tableview,但我怀疑问题可能在那里......我在那里编辑了问题......
-
您应该发布您的视图控制器订阅的
Notification,以便知道外围设备列表已更新 -
@Paulw11 他可以那样做,但在我看来“应该”有点强。
-
可能重复例如stackoverflow.com/questions/41948446/… - 这个错误说
SomeClass()而没有意识到它没有引用正确的实例是非常常见的,并且在 Stack Overflow 上已经讨论了很多。