Исключение при удалении раздела из UITableView - PullRequest
0 голосов
/ 22 июля 2011

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

Проблема:

Когда я нажимаю кнопку Удалить , в журнале появляется исключение:

Ошибка подтверждения в - [UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:974

commitEditingStyle:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {
       // [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];

        Customer *objCustomer = [arrCustomerList objectAtIndex:indexPath.section];
        NSString *strCusID = [objCustomer customerID];
        CustomerModel *objCustomerModel = [[CustomerModel alloc]init];
        [objCustomerModel deleteCustomer:strCusID];
       [tableView beginUpdates];
            [tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationLeft];

        [tableView endUpdates];
        [tableView reloadData];

    }   
}  

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

Вы можете попытаться сделать это, поместив beginUpdates вызов в начале,

if (editingStyle == UITableViewCellEditingStyleDelete) {
    [tableView beginUpdates];
    Customer *objCustomer = [arrCustomerList objectAtIndex:indexPath.section];
    NSString *strCusID = [objCustomer customerID];
    CustomerModel *objCustomerModel = [[CustomerModel alloc]init];
    [objCustomerModel deleteCustomer:strCusID];
    [tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section]
             withRowAnimation:UITableViewRowAnimationLeft];
    [tableView endUpdates];
    [tableView reloadData];
}

, потому что операции вставки / удаления / обновления должны находиться между beginUpdates и endUpdates.

Вот документ Apple:

Если вы не выполняете вызовы вставки, удаления и выделения внутри этого блока, атрибуты таблицы, такие как количество строк, могут стать недействительными.

Кроме того, если соответствующий раздел является последним, убедитесь, что вы все еще возвращаете 1 для количества разделов.В этом случае по-прежнему возвращайте 1 для количества секций и возвращайте 0 в качестве количества строк.

0 голосов
/ 22 июля 2011

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

Customer *objCustomer = [arrCustomerList objectAtIndex:indexPath.section];
NSString *strCusID = [objCustomer customerID];
CustomerModel *objCustomerModel = [[CustomerModel alloc]init];
[objCustomerModel deleteCustomer:strCusID];
[arrCustomerList removeObject:objCustomer];
[tableView reloadData];  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...