我有一个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.
}
}];
}
}
答案 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.
}
}];
}
}