2017-04-25 45 views
0

我有一个上传项目上传到AWS S3的所有任务。一旦项目已上载,它触发一个NSNotification到ViewController动画的小区(一个嗖嗖左效果),然后从表视图去除细胞:一次调用多个deleteRowsAtIndexPaths

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

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

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

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

+0

你在使用表格视图动画吗?如果你不需要,我认为使用reloadData即使重复调用也是安全的。如果必须的话,你必须以某种方式合并通知调用,所以从表视图中删除单元格只能在runloop循环中调用一次。我认为你可以看看NSNotificationQueue来帮助做到这一点。 – riadhluke

+0

如果视图控制器相互关联,请勿使用'NSNotification'。改为使用协议/委托或回调关闭。 – vadian

+0

上传管理器不是视图控制器,所以我认为它需要是一个通知。 NSNotificationQueue看起来很有趣 - 将看看这是否是一个选项谢谢。 –

回答

0

我不是完全删除单元格,而是为了防止由于动画延迟而导致表格视图中数据源和行数之间的冲突,为行高度更改设置动画。虽然不是一个完整的解决方案 - 它适用于我目前的情况。