一次调用多个 deleteRowsAtIndexPaths

Posted

技术标签:

【中文标题】一次调用多个 deleteRowsAtIndexPaths【英文标题】:Multiple deleteRowsAtIndexPaths called at once 【发布时间】:2017-04-25 15:31:19 【问题描述】:

我有一个上传所有项目的任务,其中项目被上传到 AWS S3。项目上传后,它会向 viewcontroller 触发 NSNotification 以动画单元格(向左旋转效果),然后从表格视图中删除单元格:

NSNotificationCenter.defaultCenter().postNotificationName("itemUploaded", object: nil, userInfo: ["item": item])

表格视图数据源由这些对象及其状态的列表管理。在通知观察者中,在嗖嗖动画(showExpandingButton)之后,我得到了这个项目所属的单元格并将状态设置为 .Uploaded ,这会将其从 tableView 数据源中删除。

cell.showExpandingButton( (completed) in
    self.removeCells(item)
)

RemoveCells() 然后从表格视图中删除单元格。但是,我面临的问题是几乎可以同时触发通知,这意味着表视图数据源可以比删除单元格的功能更快地更新。有什么想法吗?

【问题讨论】:

你在使用表格视图动画吗?如果您不必这样做,我认为即使重复调用,使用 reloadData 也是安全的。如果必须,您必须以某种方式合并通知调用,以便从表视图中删除单元格仅在 runloop 循环中调用一次。我想你可以看看 NSNotificationQueue 来帮助你做到这一点。 如果视图控制器相互关联,请不要使用NSNotification。改用协议/委托或回调闭包。 上传管理器不是视图控制器,所以我认为它需要是一个通知。 NSNotificationQueue 看起来很有趣 - 看看这是否是一个选项,谢谢。 【参考方案1】:

我没有完全删除单元格,而是对行高变化进行动画处理,以防止由于动画延迟导致数据源和表格视图中的行数发生冲突。虽然不是一个完整的解决方案 - 它适用于我当前的场景。

【讨论】:

以上是关于一次调用多个 deleteRowsAtIndexPaths的主要内容,如果未能解决你的问题,请参考以下文章

flutter一次调用多个接口 执行多个操作 Future.wait的用法

JDBC CallableStatement - 一次调用多个存储过程

一次调用按组对多个变量应用多个汇总函数

如何在一次调用中释放多个互斥锁

当前端的一次操作会调用多个有关联的后台接口

在一次替换调用中替换多个字符