tableview:cellForRowAtIndexPath未被调用

时间:2017-11-24 12:37:58

标签: ios uitableview reloaddata swift2.3

我有一个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没有被调用?

1 个答案:

答案 0 :(得分:0)

如果你说你在清理CoreData和UserDefaults后回到初始viewController,我认为这就是你在tableView中看不到任何内容的原因,因为你将找到的外围设备存储到CoreData中并清理它?当你来到初始控制器时,请致电discoveredPeripheral