删除打印语句如何破坏我的项目?(Swift/Xcode)



如果我注释掉打印行,toVC 中的所有内容都无法加载。toVC的每个元素都是零。如果我离开打印语句,一切都按预期工作。为什么?

如果有帮助的话,我处于UITabBarControllerDelegateanimationControllerForTransitionFrom的方法中。

我以前从未发生过这样的事情。一旦我删除该行,它就会在我第一次触摸任何附有IBOutlet的元素时中断。任何帮助将不胜感激。

func animateToProfile(using transitionContext: UIViewControllerContextTransitioning) {
guard let fromVC = transitionContext.viewController(forKey: .from)?.childViewControllers.first,
let toVC = transitionContext.viewController(forKey: .to)?.childViewControllers.first as? ProfileViewController,
let superviewToAdd = toVC.parent?.view else { return }
print("(toVC.view.frame)")
let sideMenuOriginX = UIScreen.main.bounds.width * (98 / 414)
toVC.sideMenuView.frame.origin.x = toVC.view.frame.width
toVC.visualEffectView.alpha = 0
transitionContext.containerView.addSubview(superviewToAdd)
let duration = transitionDuration(using: transitionContext)
UIView.animate(withDuration: duration, delay: 0, options: [.curveEaseInOut], animations: {
toVC.sideMenuView.frame.origin.x = sideMenuOriginX
toVC.visualEffectView.alpha = 1
}, completion: { _ in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
})
}

啊。UIViewControllers中的视图是延迟加载的,通常由SDK在生命周期的相关部分加载。这就是为什么您要在加载视图时viewDidLoad设置代码的原因。

因为在 print 语句中调用toVC.view时它是延迟加载的,所以会导致它加载。

我怀疑这条线toVC.sideMenuView.frame.origin.x = toVC.view.frame.width可能是个问题。 当您设置视图的某些属性时,该属性随后被覆盖。

若要尝试调试此内容,请尝试单步执行该行。或者,您可以将print语句替换为强制加载视图的简单_ = toVC.view。或者,在代码的不同点添加一些print(toVC.isViewLoaded)的调试语句,以查看视图是否实际加载。

最新更新