Неверное обновление табличного представления с помощью insertRowsAtIndexPaths: - PullRequest
0 голосов
/ 03 апреля 2012

У меня проблемы с insertRowsAtIndexPaths :.Я не совсем уверен, как это работает.Я смотрел видео WWDC 2010 об этом, но я все еще получаю ошибку.Я думал, что должен был обновить модель, а затем обернуть insertRowsAtIndexPaths: в вызовы tableView beginUpdates и endUpdates.Вот что у меня есть:

self.customTableArray = (NSMutableArray *)sortedArray;
[_customTableView beginUpdates];
[tempUnsortedArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [sortedArray enumerateObjectsUsingBlock:^(id sortedObj, NSUInteger sortedIdx, BOOL *sortedStop) {
        if ([obj isEqualToString:sortedObj]) {
            NSIndexPath *newRow = [NSIndexPath indexPathForRow:sortedIdx inSection:0];
            [_customTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newRow] withRowAnimation:UITableViewRowAnimationAutomatic];
            *sortedStop = YES;
        }
    }];
}];
[_customTableView endUpdates];

customTableArray - это мой массив моделей.sortedArray - это просто отсортированная версия этого массива.Когда я запускаю этот код, когда нажимаю кнопку «плюс», чтобы добавить новую строку, я получаю эту ошибку:

Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Неверное обновление: недопустимое числострок в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (2), должно быть равно количеству строк, содержащихся в этом разделе до обновления (1), плюс или минус количество строк, вставленных или удаленных изэтот раздел (2 вставлено, 0 удалено) и плюс или минус количество строк, перемещенных в или из этого раздела (0 перемещено, 0 перемещено). '

Я не уверен, чтоЯ делаю не такМысли?Благодаря.

1 Ответ

3 голосов
/ 03 апреля 2012

Я бы порекомендовал вам взглянуть немного яснее на то, что на самом деле происходит в ваших массивах. Когда ошибка зачитывается, вы по какой-то причине просите табличное представление добавить две строки, в то время как оно говорит, что у него «была одна строка», а затем проверяет источник данных после вызова метода -endUpdates и В массиве всего два объекта, а не три.

По сути, ваше перечисление состоит из двух вставок. В вашем массиве есть два объекта. На столе уже был один объект. 1 существующий + 2 вставки = 3 строки. В вашем массиве только два текущих объекта. Что случилось с лишним объектом.

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...