我喜欢使用放松细分,但却遇到了问题......
我有一个父控制器(称之为 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控制器是'坏')。关于什么是更好的方法的任何建议?
答案 0 :(得分:0)
在呈现的视图控制器viewWillDisappear:
中,或在呈现视图控制器的viewWillAppear:
中,抓取self.transitionCoordinator
并调用notifyWhenInteractionEndsUsingBlock:
- 将在完成块时调用该块当动画结束时,来自dismissViewController
。