【问题标题】:Encounter Thread 1: EXC_BAD_ACCESS (code=2) when using custom segue遇到线程 1:使用自定义 segue 时的 EXC_BAD_ACCESS (code=2)
【发布时间】:2018-10-28 21:07:44
【问题描述】:

我在这个错误上坚持了将近一个月。我创建了一个名为 SegueFromRight 的自定义 segue。我几乎从一些在线教程中复制了代码。 segue 为我的 loginView 工作,但它总是在后来的场景中崩溃。视图已经呈现并且动画也被执行。在执行 segue 几秒钟后它崩溃了,并给了我以下错误:

Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeed362ff8)

我检查了我的视图,但没有找到任何悬空的插座。如果我使用像 Show 或 Show Detail 这样的标准 segue,这个错误没有发生,这很奇怪。仅在我尝试使用此自定义转场时才发生。错误发生在以下行:

src.present(dst, animated: false, completion: nil)

完整的代码贴在下面。这一行调用的代码是用汇编编写的(我猜?)。所以我很难调试。我确实调查过了。该错误发生在 libMainThreadChecker.dylib`checker_c 中最低,它在 presentViewController 中调用。给出错误的行是:

0x1064f8d98 <+26>:  callq  0x1064fa3da               ; symbol stub for: pthread_main_np

谁能找出我的问题?非常感谢!如果您需要更多代码,请随时发表评论。

class SegueFromRight: UIStoryboardSegue {

    override func perform() {
        moveInFromRight()
    }

    func moveInFromRight() {
        let src = self.source
        let dst = self.destination

        dst.view.transform = CGAffineTransform(translationX: src.view.frame.size.width, y: 0)
        src.view.superview?.addSubview(dst.view)

        UIView.animate(withDuration: 0.25, delay: 0, options: .curveEaseInOut, animations: {
            dst.view.transform = CGAffineTransform(translationX: 0, y: 0)
        }, completion: { finished in
            src.present(dst, animated: false, completion: nil) // gives the error
        })
    }

}

【问题讨论】:

    标签: swift uiviewcontroller swift4 uistoryboardsegue presentviewcontroller


    【解决方案1】:

    你的行为是非法的。您不能像这样对目标视图执行转换或将目标视图直接添加到源视图。如果您的目标是使用自定义动画进行演示,则必须为演示文稿编写正确构建的自定义过渡动画。您使用自定义转场这一事实可以帮助您封装自定义过渡动画代码,但它不会改变您必须如何执行此操作的规则。您必须将目标视图控制器的 modalPresentationStyle 设置为 .custom,设置其 transitioningDelegate,并提供 UIViewControllerTransitioningDelegate 或 UIPresentationController 子类或两者,就像任何自定义演示动画一样。

    【讨论】:

    • 能否请您举个例子或指出我可以学习如何做到这一点的地方?因为我看到的网上教程都是这样实现的。所以我不知道该怎么做。
    • 另一个问题是,您的意思是所有这些在线教程都没有正确执行吗?例如,此视频中的那个youtube.com/watch?v=jn-93qElOT4。我的课和他的差不多,除了动画部分。
    • github.com/mattneub/Programming-iOS-Book-Examples/blob/master/… 是一个非常基本的示例,是的,我可能确实是这个意思,但我对看教程视频不感兴趣,我有兴趣教你正确的方法
    猜你喜欢
    • 2014-09-19
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多