展开segue - 检测动画何时完成

时间:2015-09-03 02:07:15

标签: ios core-data tableview modalviewcontroller unwind-segue

我喜欢使用放松细分,但却遇到了问题......

我有一个父控制器(称之为 Home ),它以模态方式呈现一个孩子(称之为详细信息)。

细节控制器有一个显示核心数据实体集合的tableview,我有一个删除按钮,当它被点击时我想删除所有这些实体,并关闭模态,并更新家庭控制器以显示实体已被删除。

我的第一次尝试self.context.deleteObject(entity)后跟一个展开的segue工作,除了有足够实体的情况下,tableview可以用动量滚动,并且当表还在减速时点击删除按钮。导致崩溃的原因:(

据我所知,这是因为我刚刚删除了实体,但由于tableview仍在滚动(当dismiss动画完成时),tableView尝试将要出现的单元格出列(因为滚动)但随后因为没有实体而崩溃了。

  • 如果在取消模型视图时调用了viewDidAppear,我可以在那里更新Home(但不会调用它)。

  • 如果unwind segue有一个在动画完成时调用的闭包,我可以在那里更新Home(但它没有我能找到的那样)。

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

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

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

    })
}

哪个有效,但感觉不对(我猜是因为我觉得细节控制器必须要知道Home控制器是'坏')。关于什么是更好的方法的任何建议?

1 个答案:

答案 0 :(得分:0)

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