NSInternalInconsistencyException (invalid number of rows)

前端 未结 3 653
陌清茗
陌清茗 2020-12-09 17:54

Whenever I have data in my UITableView and I start deleting, it works fine. However, when I get to the last object in the table, and delete it, it crashes.

3条回答
  •  没有蜡笔的小新
    2020-12-09 18:21

    The method tableView:numberOfRowsInSection must always return exact number of rows:

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        // Return the number of rows in the section.
        return [myData count];
    }
    

    After having deleted last row, you may want to delete the whole section. Simply call deleteSections:withRowAnimation: within a beginUpdates and endUpdated block;

    -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
        if (editingStyle == UITableViewCellEditingStyleDelete) {
            // Delete the row from the data source
            [tableView beginUpdates];
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            [myData removeObjectAtIndex:[indexPath row]];
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            NSString *somepath = [documentsDirectory stringByAppendingPathComponent:@"something.plist"];
            [myData writeToFile:somepath atomically:YES];
            if ([myData count] == 0) {
                // NEW! DELETE SECTION IF NO MORE ROWS!
                [tableView deleteSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationFade];
            }
            [tableView endUpdates];
        }   
    }
    

提交回复
热议问题