2017-01-31 14 views
0

У меня есть tableView внутри collectionViewCell, и я получаю сообщение об ошибке при попытке перезагрузить данные.Перезагрузка данных из таблицыView в коллекцииViewCell

*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.6.21/UITableView.m:1610 

Я попытался с помощью Dispatch.main.async и, кажется, чтобы избавиться от этой проблемы. Единственное, что не требуется перезагружать данные и ничего не меняется в tableView

func cleanItems(completion: @escaping (Bool) -> Void) { 

    Dispatch.main.async { 

     cell.tableView.beginUpdates() 
     // Make changes in the Data Source 
     cell.tableView.deleteRows(at: selectedItems, with: .fade) 
     cell.tableView.endUpdates() 

     // Reloading sections accordingly depending on what the user has deleted 

     // Do I need to reload data here again? It used to work without Dispatch, but it wasn't stable 
     cell.tableView.reloadData() 


     // Updating items with if statements to reload data in Firebase 

     completion(true) 

    } 
} 

в этом не перегрузить данные на всех, и ничего, кажется, меняется. Хорошо, что я не получаю случайный сбой, что было до внедрения Dispatch.main.async

В каждом разделе я получил numberOfRows, чтобы узнать, сколько строк после окончания обновлений.

print(cell.tableView.numberOfRows(inSection: 1)) 

и я получаю такое же количество строк, которые находятся в текущем виде.

Это очень важно, потому что если разделы tableView равны нулю, то collectionViewCell должен исчезнуть. И мы никогда не попадаем сюда в блок completion, так как он говорит, что numberOfRows никогда не менялся. Оставив нас с обновленным tableView.

+0

Вам также необходимо удалить объект из массива. –

+0

Я сделал это в реальном коде, я просто упростил структуру здесь. То, как я это делаю, - это получить выбранныеIndexPaths и применить фильтр для удаления элементов в выбранныхIndexPaths. – Christian

ответ

0

Я решил это, переместив Dispatch.main.async вне вызова функции.

Dispatch.main.async { 

    cleanItems(completion: { (success) in 


    etc. 


    }) 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^