为什么更改委托会导致崩溃?

时间:2017-04-01 04:55:12

标签: ios swift animation uinavigationcontroller exc-bad-access

我有一个导航控制器,它是自己的委托,也可以处理动画过渡:

class NavController: UINavigationController, UINavigationControllerDelegate, UIViewControllerAnimatedTransitioning {
  func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    if operation == .push && toVC is GalleryController {
      return self
    }
    return nil
  }

  func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
    print("Animation beginning")
    ...
  }

  func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?)
    -> TimeInterval {
      print("transition duration")
      return TimeInterval(0.2)
  }

}

这与lookup_mporforward中的EXC_BAD_ACCESS崩溃,由pushViewController直接调用。

调用transitionDuration()方法,但不调用animateTransition()。

如果我执行以下任何操作,问题就会消失:

  1. pushViewController with animated = false
  2. 将上述代码中的第一个方法更改为始终返回nil。
  3. 将UIViewControllerAnimatedTransitioning的实现重构为另一个类并返回该实例。
  4. 这是违反直觉的。你知道为什么这可能会出错吗?

    有关调试的更多信息:

    • NavController没有被释放(我在deinit中打印)。
    • 启用僵尸并没有帮助。
    • 启用异常断点并没有帮助。
    • 这是在iOS 10.3上。

0 个答案:

没有答案