Ошибка подтверждения в - [UITableView _endCellAnimationsWithContext:] при преобразовании Objective-C в Swift

ios objective-c swift uitableview

1474 просмотра

2 ответа

66173 Репутация автора

У меня огромная проблема с кодом, который я преобразовал в Swift. При вызове self.tableView.endUpdates()мое табличное представление остается пустым, и я получаю следующую ошибку:

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

Как ни странно, когда тот же код был написан в Objective-C, эта ошибка не появляется.

Источник данных и делегат табличного представления все еще находятся в Objective-C и используются многими другими контроллерами представления в проекте.

Вот код в Objective-C:

self.dataSource.itemArray = [self.userList copy];
NSMutableArray *indexPaths = [NSMutableArray new];

for (NSUInteger i = (offset); i < (end); i++) {
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
    [indexPaths addObject:indexPath];
}

[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:[indexPaths copy]
                      withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];

И это тот же код, но затем в быстром:

self.dataSource.itemArray = self.userList.copy() as! [User]
var indexPaths = [NSIndexPath]()
for i in offset...end {
    let indexPath = NSIndexPath(forRow: i, inSection: 0)
     indexPaths.append(indexPath)
}
self.tableView.beginUpdates()
self.tableView.insertRowsAtIndexPaths(indexPaths, withRowAnimation: .Fade)
self.tableView.endUpdates()

tableView:numberOfRowsInSection:Называется правильно и вернуться в тот же в обоих случаях. Также ячейка правильно прописана.

Есть известная проблема или просто я не могу расширить базовый класс Objective-C в Swift.

Автор: rckoenes Источник Размещён: 19.07.2016 08:51

Ответы (2)


1 плюс

3810 Репутация автора

Решение

В этом куске кода:

for i in offset...end {
   let indexPath = NSIndexPath(forRow: i, inSection: 0)
   indexPaths.append(indexPath)
}

Последнее, indexPathчто будет добавлено NSIndexPath(forRow: end, inSection: 0), это означает, что вы добавляете одну дополнительную строку в табличное представление, что не ожидается.

Возможно, вы хотите изменить свой цикл на:

for i in offset..<end {
   let indexPath = NSIndexPath(forRow: i, inSection: 0)
   indexPaths.append(indexPath)
}
Автор: Juri Noga Размещён: 19.07.2016 08:55

0 плюса

1 Репутация автора

В моем случае

myTableView.reloadSections ([sectionIndex], с: .none)

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

Автор: gn. Dolly Размещён: 08.05.2017 11:03
Вопросы из категории :
32x32