从表视图中删除一行

时间:2012-03-27 18:14:25

标签: iphone ios uitableview core-data

当我尝试从表格View中删除一行时,我遇到了tableView崩溃的问题。正确地在数据库中进行更改时,将正确调用该方法。我收到的错误是:

  

无效更新:第0部分中的行数无效。

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

    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    NSManagedObjectContext *context = [delegate managedObjectContext];


    NSManagedObject *objectToDelete = [fixedArray objectAtIndex:indexPath.row];

    [context deleteObject:objectToDelete];

    [delegate saveContext];

    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

    fixedArray = ([self mondayData]); // this is fetching the data for the array that I supply to the table view

[self.tableView numberOfRowsInSection:[fixedArray count]];

    [self.tableView reloadData];


}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    return [fixedArray count];
}

3 个答案:

答案 0 :(得分:0)

您的- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section方法可能无法返回适当的行数。它应该返回先前的行数减去刚刚删除的行数。

此外,如果该部分中没有其他行,则必须从UITableView中删除该部分。

答案 1 :(得分:0)

您需要包含

[tableView beginUpdates];

[tableView endUpdates];
你的代码中的

。删除或插入行时,这两种方法可以防止UITableView崩溃。

在删除tableView的行之前放置beginUpdates,然后在完成所有操作后放置endUpdates

这是documentation

答案 2 :(得分:0)

    [tableView beginUpdates];

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];


        NSManagedObject *object = [fixedArray objectAtIndex:indexPath.row];

        [object setValue:@"No" forKey:@"selected"]; // this works and persists into the database

        [delegate saveContext];

        fixedArray = ([self mondayData]);

        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES];

    }


    [tableView endUpdates];

    [self.tableView reloadData];

这最终对我有用。