Ios 展开序列-动画完成时检测

Ios 展开序列-动画完成时检测,ios,core-data,tableview,modalviewcontroller,unwind-segue,Ios,Core Data,Tableview,Modalviewcontroller,Unwind Segue,我喜欢使用放松分段,但遇到了一个问题 我有一个父控制器(称之为Home),它以模式(称之为Detail)呈现一个子控制器 Detail controller有一个tableview,其中显示了一组核心数据实体,我有一个Delete按钮,点击该按钮时,我想删除所有这些实体,关闭模式,并更新home controller以显示实体已被删除 我第一次尝试使用self.context.deleteObject(entity),然后是一个展开序列,除非有足够多的实体,tableview可以快速滚动,并且在

我喜欢使用放松分段,但遇到了一个问题

我有一个父控制器(称之为Home),它以模式(称之为Detail)呈现一个子控制器

Detail controller有一个tableview,其中显示了一组核心数据实体,我有一个Delete按钮,点击该按钮时,我想删除所有这些实体,关闭模式,并更新home controller以显示实体已被删除

我第一次尝试使用
self.context.deleteObject(entity)
,然后是一个展开序列,除非有足够多的实体,tableview可以快速滚动,并且在表格仍在减速时点击Delete按钮。导致崩溃的原因:(

据我所知,这是因为我刚刚删除了实体,但由于tableview仍在滚动(而Disclose动画正在完成),tableview尝试将即将出现的单元格(由于滚动),但由于不再有实体而崩溃


  • 如果在模型视图被取消时调用viewDidAppear,我可以在那里更新Home(但它没有被调用)

  • 如果在动画完成时调用了“展开”序列的结束,我可以在那里更新主页(但这并不是我所能找到的)

所以现在我手动调用
dismissViewControllerAnimated
并使用那里的闭包刷新主控制器

if let nc = self.presentingViewController as? UINavigationController, home = nc.topViewController as? HomeViewController {

    self.dismissViewControllerAnimated(true, completion: { _ in
        self.model.deleteEntities()
        home.refresh()

    })
}

这是可行的,但感觉不对(我猜是因为我觉得细节控制器必须了解主控制器是“不好的”)。有什么更好的方法的建议吗?

在显示视图控制器的
视图中将消失:
,或者在显示视图控制器的
视图中将出现:
,抓取
self.transitionCoordinator
并调用
notifyWhenInteractionEndsUsingBlock:
-在完成时将调用该块动画结束时,将从
dismissViewController
锁定。

“如果在模式视图被解除时调用ViewDidDisplay”它是被调用的,所以我不太明白有条件的…谢谢!
notifyWhenInteractionEndsUsingBlock:
正是我想要的!我正在为segue设置它并使用展开。我也很惊讶
视图会出现:
没有被调用,但我想这是因为我使用的是一个自定义的演示控制器,它没有被调用“但我认为这是因为我使用的是一个定制的演示控制器,它不会占用整个屏幕”,这就是原因——感谢您添加了这个细节。