У меня возникли проблемы с выяснением этой проблемы GCD.Основные данные: Вставка новой строки после выполнения выборки
Предположим, что в табличном представлении есть один UITableViewCell. Эта ячейка имеет некоторые текстовые поля, которые пользователь редактирует. После того, как пользователь закончит редактирование, ячейка создает новый объект в Core Data на основе того, что пользователь вводил. Этот объект вставляется с insertNewObjectForEntityForName
.
После этого мне нужно performFetch
на NSFetchedResultsController и перезагрузить табличное представление. Тем не менее, я также хочу добавить новую ячейку в конец таблицы, поэтому пользователь может добавить другой элемент в свой список.
Это то, что я делаю, чтобы попробовать, что:
dispatch_async(dispatch_get_main_queue(), {
do {
try self.fetchedResultsController.performFetch()
} catch {
fatalError("Fetch failed: \(error)")
}
self.tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: self.fetchedResultsController.sections!.first!.numberOfObjects - 1, inSection: 0)], withRowAnimation: .Automatic)
self.tableView.reloadData()
})
добавляется новая клетка, но без строки анимации. Я думаю, что я кое-что недопонимаю с GCD и Core Data. Спасибо за помощь.
Попробуйте это: 'Func controllerWillChangeContent (контроллер: NSFetchedResultsController) { tableView.beginUpdates() } Func controllerDidChangeContent (контроллер: NSFetchedResultsController) { tableView.endUpdates() }' – Santosh
@Santosh Я попробовал этот делегат методы, а новая ячейка добавляется с анимацией строк. Однако обе ячейки заполняются одними и теми же данными (подразумевая, что табличный вид все еще необходимо перезагрузить). Когда я просматриваю представление таблицы, ячейки корректируют себя (подтверждая эту импликацию). –
Да, сохраните свой 'self.tableView.reloadData()' также после того, как вы введете 'insertRowAt..'. – Santosh