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
когда вы приходите к первоначальному контроллеру.