UITableView在尝试删除单元格时起作用

时间:2011-11-01 06:42:08

标签: iphone objective-c cocoa-touch uitableview

我有一个UITableViewController,当我尝试滑动以删除一个单元格并按下删除时,它会将单元格转换为编辑模式并显示左侧的红色箭头。但数据已被删除。因为当我重新启动应用程序时,它就消失了。我的代码中的任何内容都有可疑吗?

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animate
{
    [self.tableView setEditing: !self.tableView.editing animated:YES];

    if (self.tableView.editing)
        [self.navigationItem.leftBarButtonItem setTitle:@"Done"];
    else
        [self.navigationItem.leftBarButtonItem setTitle:@"Edit"];
}

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
 {
     if (editingStyle == UITableViewCellEditingStyleDelete) 
     {
         PFObject *routine= [self.routineArray objectAtIndex:indexPath.row];
         [routine deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
             if (!error) {
                 [self.tableView reloadData];
             } else {
                 // There was an error saving the gameScore.
             }
         }];   
     }
 }

1 个答案:

答案 0 :(得分:1)

您必须从dataSource self.routineArray中删除该项,然后使用-deleteRowsAtIndexPaths:withRowAnimation:将其从tableView中删除,然后将其从Core Data存储中删除。顺序很重要,因为如果它仍然存在于dataSource中,则无法从tableView中删除它,或者由于tableView与其dataSource的项目数不同步而引发异常。

在这个例子中,它首先从Data Store中删除,然后从dataSource中删除,然后从tableView中删除,这也应该可以正常工作。

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    {
        PFObject *routine= [self.routineArray objectAtIndex:indexPath.row];
        [routine deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
            if (!error) {
                [self.routineArray removeObjectAtIndex:indexPath.row];
                [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            } else {
                // There was an error saving the gameScore.
            }
        }];   
    }
}