我有一个tableview,可以加载从BLE收到的外围设备。此NSMutableArray
在appDelegate中维护。每当在应用程序中收到新的外围设备时,我都会将其添加到阵列中。
我的问题是,首次运行时一切正常,表格会相应更新,我会暂时使用该应用程序。然后我重置(应用程序中的CoreData,UserDefaults)我的应用程序并返回初始屏幕。
我使用以下代码返回我的应用的初始屏幕
class func showStartScreen() {
let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
let nav = storyboard.instantiateInitialViewController()
(UIApplication.sharedApplication().delegate)!.window!!.rootViewController = nav
(UIApplication.sharedApplication().delegate)!.window!!.makeKeyAndVisible()
}
当我重置应用数据并返回到我在桌面视图中显示外围设备的屏幕时,它不会更新。我可以看到外围设备已添加到阵列中,但是当我重新加载tableview时tableview:cellForRowAtIndexPath
未被调用。
我尝试在表格中添加一个虚拟单元格,此时tableview:cellForRowAtIndexPath
被正确调用,但仅适用于虚拟单元格。
numberOfRowsInSection
返回正确的值,我的数据源和委托也正确设置。
每次为BLE外设启动扫描时,我都会清除列表
在AppDelegate中:
func discoveredPeripheral(peripheral: CAPeripheral) {
print("added peripheral")
var isDuplicate:Bool = false
for object in scannedPeripherals! {
if object is CAPeripheral {
let newPeripheral = object as! CAPeripheral
// Need to add check of nil
if newPeripheral.peripheral_UUID == peripheral.peripheral_UUID {
isDuplicate = true
}
}
}
if (!isDuplicate) {
self.scannedPeripherals?.addObject(peripheral)
}
}
在ScanVC中:
func discoveredPeripheral(peripheral: CAPeripheral) {
dispatch_async(dispatch_get_main_queue()) {
self.peripheralTableView.reloadData()
}
}
希望我已经解释得很好。当我清楚地显示数据时,为什么tableview:cellForRowAtIndexPath
没有被调用?
答案 0 :(得分:0)
如果你说你在清理CoreData和UserDefaults后回到初始viewController,我认为这就是你在tableView中看不到任何内容的原因,因为你将找到的外围设备存储到CoreData中并清理它?当你来到初始控制器时,请致电discoveredPeripheral
。