Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 一次调用多个DeleteRowsatindExpath_Ios_Swift_Uitableview_Animation_Cells - Fatal编程技术网

Ios 一次调用多个DeleteRowsatindExpath

Ios 一次调用多个DeleteRowsatindExpath,ios,swift,uitableview,animation,cells,Ios,Swift,Uitableview,Animation,Cells,我有一个上传所有的任务,其中项目被上传到AWS S3。项目上载后,将向viewcontroller发出NSNotification以设置单元格动画(向左旋转效果),然后从表视图中删除该单元格: NSNotificationCenter.defaultCenter().postNotificationName("itemUploaded", object: nil, userInfo: ["item": item]) 表视图数据源由这些对象及其状态的列表管理。在notification obse

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

NSNotificationCenter.defaultCenter().postNotificationName("itemUploaded", object: nil, userInfo: ["item": item])
表视图数据源由这些对象及其状态的列表管理。在notification observer中,在swish动画(showExpandingButton)之后,我获取该项所属的单元格,并将其状态设置为.upload,这会将其从tableView数据源中删除

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

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

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

是否使用表视图动画?如果不必这样做,我认为即使重复调用,使用重载数据也是安全的。如果必须这样做,则必须以某种方式合并通知调用,以便在runloop循环中只调用一次从表视图中删除单元格。我认为您可以查看NSNotificationQueue以帮助完成此操作。如果视图控制器彼此相关,请不要使用
NSNotification
。改为使用协议/委托或回调闭包。上载管理器不是视图控制器,所以我认为它需要是一个通知。NSNotificationQueue看起来很有趣-将查看这是否是一个选项,谢谢。