Получаете странную ошибку при перезагрузке индекса раздела? - PullRequest
2 голосов
/ 08 января 2010

Я использую iPhone SDK и Objective-C и Я получаю это сообщение об ошибке:

Ошибка подтверждения в - [UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-984.38/UITableView.m:774 2010-01-08 13: 24: 16.842 MyAPP [628: 20b] Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Недопустимое обновление: недопустимое количество строк в разделе 1. Число строк в существующем разделе после update (1) должно быть равно количеству строк, содержащихся в этом разделе до обновления (0), плюс или минус количество строк, вставленных или удаленных из этого раздела (0 вставлено, 0 удалено).

Вот мой код для расширения разделов:

- (void)checkAction:(id)sender
{
    //The button is added as subview on a view and the view is section header custom view
    UIButton *Button = (UIButton*)sender;
    NSLog(@"Button Tag=%d",Button.tag);
    if([[self.MySectionIndexArray objectAtIndex:Button.tag] isEqualToString:@"UP"])
    {
        [self.MySectionIndexArray replaceObjectAtIndex:Button.tag withObject:@"DOWN"];
        [ButtonDrop setBackgroundImage:[UIImage imageNamed:@"Up.png"] forState:UIControlStateNormal];
        [TableDashBoard reloadSections:[NSIndexSet indexSetWithIndex:Button.tag] withRowAnimation:UITableViewRowAnimationFade];
    }
    else
    {
        [self.MySectionIndexArray replaceObjectAtIndex:Button.tag withObject:@"UP"];
        [ButtonDrop setBackgroundImage:[UIImage imageNamed:@"Down.png"] forState:UIControlStateNormal];
    }
    NSLog(@"self.MySectionIndexArray ka title = %@ at index Number=%d",self.MySectionIndexArray,Button.tag);
}

Ответы [ 2 ]

6 голосов
/ 08 января 2010

Проблема в том, что вы используете reloadSections при изменении содержимого таблицы dataSource, чтобы она сообщала о различном количестве строк с помощью tableView:numberOfRowsInSection:.

Проверьте, что вы возвращаете с вашего UITableViewDataSource tableView:numberOfRowsInSection:. Я держу пари, что в начале вы возвращаете 0 для секции 1, но когда вы звоните reloadSections, вы возвращаете 1 для секции 1.

Если это действительно так, вы можете использовать UITableView методы beginUpdates, insertRowsAtIndexPaths:withRowAnimation: и endUpdates.

2 голосов
/ 17 мая 2011

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

Но, наконец, я понял, что на самом деле я модифицировал 2 раздела, но обновил источник данных только для одного.

...