当前位置: 首页 > 知识库问答 >
问题:

按升序(从下到上)删除tableView行时,会删除不正确的tableView行

卞成荫
2023-03-14

按升序(从下到上)删除tableView行时,正在删除所选行上方的不正确行。例如,使用以下四行:

A B C D

当向左滑动删除D行时,正在删除C行。

相反,当按降序(从上到下)删除时,没有任何问题,行是按正确的顺序删除的。基本删除代码的后面是具有两个部分的tableView(在两个部分中按升序删除时会出现问题)。任何建议,非常感谢!

let deleteAction = UIContextualAction(style: .destructive, title: NSLocalizedString("Delete", comment:"Delete")) { _, _, complete in
            let section = indexPath.section
            let row = indexPath.row
            let i = IndexPath(item: row, section: section)
           
            if section == 0 {
            
            self.cyclesteps.remove(at: row)
            self.tableView.deleteRows(at: [i], with: .automatic)
       
          
                
                let thesample = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceCycling)
                let thepredicate = HKQuery.predicateForObjects(from: HKSource.default())
                healthStore.deleteSamplesOfType(thesample!, predicate: thepredicate, withCompletion: { (success, count, error) -> Void in
                    DispatchQueue.main.async(execute: { () -> Void in
                       
                        if error == nil
                        {
                            // saved successfully
                           
                            //self.tableView.reloadRows(at: [i], with: .automatic)
                            
                        }
                        else
                        {
                            print("Error occured while saving to Health Kit: \(error!.localizedDescription)")
                            
                            
                        }
                    })
               })
                
            }

共有1个答案

连翰
2023-03-14

强烈建议首先删除数据库中的项,然后删除数据源中的项(如果成功),然后更新视图

let deleteAction = UIContextualAction(style: .destructive, title: NSLocalizedString("Delete", comment:"Delete")) { _, _, complete in
    
    guard indexPath.section == 0 else { complete(false) }
    let thesample = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceCycling)
    let thepredicate = HKQuery.predicateForObjects(from: HKSource.default())
    healthStore.deleteSamplesOfType(thesample!, predicate: thepredicate, withCompletion: { (success, count, error) -> Void in
       DispatchQueue.main.async { 
               
           if let error = error {
                print("Error occured while saving to Health Kit: \(error.localizedDescription)")  
                complete(false)                          
           } else {
                // saved successfully
                   
                self.cyclesteps.remove(at: indexPath.row)
                self.tableView.deleteRows(at: [indexPath], with: .automatic)
                complete(true)
           }
       }
   })                
}

并且不要忘记调用该操作的complete处理程序。

 类似资料:
  • 我有一个TableView,它沿着一列生成按钮: 构建任务管理应用程序。我希望能够删除按钮所在的行,而不是按下相应按钮时选择的行。 My table类实现了EventHandler,因此按下TableView中的按钮时会运行handle()方法: 唯一缺少的是如何检测按下按钮的行,然后将其删除(因为所有按钮都运行相同的句柄方法)。非常感谢你的帮助。 为清晰起见,请将代码转储到此处:https://

  • 问题内容: 我试图从javafx的tableview中删除所选记录。以下是我如何用数据填充表的方法: 那就是我删除记录的方式: 但这会带来错误。我在示例项目中做了同样的事情,一切顺利。那么,如何解决此问题? 问题答案: 从基础列表而不是过滤/排序列表中删除数据:

  • 例如,在Name和Description列之间有一条线,我假定它是网格线。我不知道用CSS删除它。我可以在Java Swing中使用setShowGrid(false)来完成;但这在JavaFX中是不可用的。

  • 我正在做一个更大的项目(和很多同学一起),我试图在TableView中显示一个arrayList(我们在项目中反复使用的类型,所以我不想仅仅为了我的小问题而将所有这些都改为ObservableLists)。 初始化父根和tableView时,ArrayList主题被转换为ObservableList,并加载到tableView中。 我真的很想从理论上理解,为什么改变成绩对tableView有效,但

  • 本文向大家介绍从视图中删除行会从MySQL的基表中删除行吗?,包括了从视图中删除行会从MySQL的基表中删除行吗?的使用技巧和注意事项,需要的朋友参考一下 是的,从视图中删除行从基表中删除行。让我们通过创建一个新表来了解这一点。创建表的查询如下 使用insert命令在表中插入一些记录。查询如下- 使用select语句显示表中的所有记录。查询如下- 以下是输出 让我们创建一个视图。创建视图的查询如下

  • 问题内容: 从视图中删除一行,是否会从创建该视图的基表中删除相应的行?我正在使用MySQL。 问题答案: 是的,它会的。唯一需要注意的是权限。 引用官方文档 有些观点是可更新的。也就是说,您可以在诸如UPDATE,DELETE或INSERT之类的语句中使用它们来更新基础表的内容。为了使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。还有某些其他构造会使视图不可更新。