tableview:cellForRowAtIndexPath не вызывается

У меня есть таблица, которая загружает периферийные устройства, полученные от 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: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 ответ

Если вы говорите, что возвращаетесь к исходному viewController после очистки CoreData и UserDefaults, я предполагаю, что именно поэтому вы ничего не видите в своем tableView, потому что вы сохраняете найденные периферийные устройства в CoreData и очищаете его? Вызов discoveredPeripheral когда вы приходите к первоначальному контроллеру.

Другие вопросы по тегам