Поток встреч 1: EXC_BAD_ACCESS (code = 2) при использовании пользовательского перехода - PullRequest
0 голосов
/ 29 октября 2018

Я застрял на этой ошибке почти месяц.Я создал пользовательский переход под названием SegueFromRight.Я в значительной степени копирую код из некоторых онлайн-уроков.Segue работал для моего loginView, но он всегда терпел крах на более поздней сцене.Представление было уже представлено, и анимация была также выполнена.Он потерпел крах через несколько секунд после того, как была выполнена передача, и выдал мне следующую ошибку:

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

Я проверил свой вид и не нашел ни одного свисающего выхода.И очень странно, что эта ошибка не произошла, если я использовал стандартную передачу, такую ​​как Показать или Показать детали.Это произошло только тогда, когда я пытаюсь использовать этот пользовательский переход.Ошибка произошла в строке:

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
        })
    }

}

1 Ответ

0 голосов
/ 29 октября 2018

То, что вы делаете, незаконно.Вы не можете выполнить преобразование в представлении назначения или добавить представление назначения непосредственно в исходное представление, как это.Если ваша цель - сделать презентацию с пользовательской анимацией, вы должны написать правильно созданную пользовательскую анимацию перехода для своей презентации.Тот факт, что вы используете пользовательский переход, может помочь вам инкапсулировать пользовательский код анимации перехода, но это не меняет правила того, как вы должны это делать.Вы должны установить для modalPresentationStyle контроллера представления назначения значение .custom, установить его transitioningDelegate и предоставить подкласс UIViewControllerTransitioningDelegate или UIPresentationController или оба, так же, как с любой пользовательской анимацией представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...