一次调用多个 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的用法