2013-10-02 4 views
0

Я использую это, чтобы добавить строки в моей UITableView с анимацией:Ошибка добавления строки в UITableView с анимацией

[bookMarksArray insertObject:infoDict atIndex:0]; 
NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:[bookMarksArray count] inSection:0]; 
[bookMarkTable insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; 

, когда я называю [bookMarkTable reloadData] все работает отлично. Но если я пытаюсь использовать предыдущий код, мое приложение вылетает с ошибкой: попытайтесь вставить строку 1 в раздел 0, но после обновления есть только 1 строка в разделе 0. Есть идеи ?

ответ

0

При создании указательного пути вам понадобится [bookMarksArray count] - 1 (с индексированием 0).

+1

Он вставил объект в индекс 0. Таким образом, ваше решение не совсем правильно. Таблица будет вставлять строку в нижней части таблицы, и она будет дубликатом предыдущей последней строки, поскольку она сопоставляется с тем же объектом в конце массива модели данных. –

+0

Спасибо за помощь Тимоти, я так привык видеть «addObject:», что я полностью пропустил эту точку. –

0

Попробуйте обновить numberOfRows перед вызовом insertRowsAtIndexPath.

1

@ пояснение Джонатана об исключении является правильным. Но решение по-прежнему не так. Вы вставили объект с индексом 0, поэтому индекс путем вставленной строки будет:

NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 

Если вы вставили объект в конце массива, вы могли бы сделать

NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:[bookMarksArray count] - 1 inSection:0]; 
Смежные вопросы