unwind segue - 检测动画何时完成

unwind segue - detect when animation completes

我喜欢使用 unwind segues 但遇到了问题...

我有一个 parent 控制器(称之为 Home),它以模态方式呈现 child(称之为 Detail).

Detail 控制器有一个 table 显示核心数据实体集合的视图,我有一个删除按钮,点击它时我想删除所有这些实体,关闭模式,然后更新主控制器以显示实体已被删除。

我的第一次尝试 self.context.deleteObject(entity) 之后是一个展开的 segue 成功了,除非有足够多的实体使得 table 视图可以随动量滚动,并且在点击删除按钮的同时table 仍在减速。这会导致崩溃:(

据我所知,这是因为我刚刚删除了实体,但是因为 table 视图仍在滚动(在关闭动画完成时),table 视图试图出列即将出现的单元格(由于滚动)但随后崩溃,因为不再有实体。

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

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

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

    })
}

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

在呈现视图控制器的 viewWillDisappear: 中,或在呈现视图控制器的 viewWillAppear: 中,抓取 self.transitionCoordinator 并调用 notifyWhenInteractionEndsUsingBlock: - 该块将在当动画结束时,dismissViewController 的完成块将是。