TEL:400-8793-956
当前位置:程序、服务器

在iOS coredata应用中删除行

提问者: 近期获赞: 浏览人数: 发布时间:2021-01-21 13:21:25

 问:我正尝试将双关语更进一步,并删除行。我收到一个让我感到困惑的错误。显然,它不能正确地重新计算行数,但是我无法找到解决方法,因为双关语处理的部分与我通过google看到的内容完全不同。

 
错误是-无效的更新:第0节中的行数无效。更新(0)之后现有节中包含的行数必须等于更新(1)前该节中包含的行数,再加上或减去从该部分插入或删除的行数(插入0,删除2),再加上或减去移入或移出该部分的行数(移入0,移出0)。
 
我正在使用的删除代码是-
 
//删除行
 
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
 
如果(editingStyle == UITableViewCellEditingStyleDelete){
     [self.tableView beginUpdates]; //避免NSInternalInconsistencyException
     // //删除已刷卡的对象
   Pun * punToDelete = [self.fetchedResultsController objectAtIndexPath:indexPath];
    NSLog(@“删除(%@)”,punToDelete.pun);
    [self.managedObjectContext deleteObject:punToDelete];
    [self.managedObjectContext save:nil];
    //删除表格上的(现在为空)行
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
           [self.tableView endUpdates];
     NSLog(@“%d”,self.fetchedResultsController.sections.count);
}
 
}
 
答:不需要专门调用delete,因为已经使用NSFetchedResultsControllerDelegatelikedidChangeSection和的方法调用了delete didChangeObject。
 
因此,您的代码实际上应该是:
 
-(void)tableView:(UITableView *)tableView 
   commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
   forRowAtIndexPath:(NSIndexPath *)indexPath {
   if(editingStyle == UITableViewCellEditingStyleDelete){
     //删除对象 
    Pun * punToDelete = [self.fetchedResultsController objectAtIndexPath:indexPath] ;
    [self.managedObjectContext deleteObject:punToDelete];
    [self.managedObjectContext save:nil];
    }
 }
 
理想情况下,您要检查错误:
 
如果(editingStyle == UITableViewCellEditingStyleDelete){双关
    * punToDelete = [self.fetchedResultsController objectAtIndexPath:indexPath];
    [self.managedObjectContext deleteObject:punToDelete];
           //保存上下文。
    NSError *错误;
    if(![self.managedObjectContext save:& error]){
         / *
         用代码替换此实现以适当地处理错误。
 
 
 
         abort()使应用程序生成崩溃日志并终止。尽管此功能在开发过程中可能很有用,但您不应在运输应用程序中使用此功能。如果无法从错误中恢复,请显示警告面板,指示用户通过按“主页”按钮退出应用程序。
         * /
         NSLog(@“未解决的错误%@,%@”,错误,[错误userInfo]);
        abort();
    }        
 }
上一篇: 论坛导航
下一篇: Android初始化失败