UISwipeGestureRecognizer на tvOS дает мне EXC_BAD_ACCESS - PullRequest
2 голосов
/ 01 октября 2019

Я пытаюсь добавить код жеста для пролистывания вверх / вниз к своему UIViewController в приложении tvOS.

    override func loadView() {
        let swipeDown = UISwipeGestureRecognizer(
            target: self,
            action: #selector(self.respondToSwipeGesture)
        )
        swipeDown.direction = UISwipeGestureRecognizer.Direction.down
        self.view.addGestureRecognizer(swipeDown)

        let swipeUp = UISwipeGestureRecognizer(
            target: self,
            action: #selector(self.respondToSwipeGesture)
        )
        swipeUp.direction = UISwipeGestureRecognizer.Direction.up
        self.view.addGestureRecognizer(swipeUp)
    }

    @objc private func respondToSwipeGesture(gesture: UIGestureRecognizer) {
        if let swipeGesture = gesture as? UISwipeGestureRecognizer {
            switch swipeGesture.direction {
                case UISwipeGestureRecognizer.Direction.down:
                    print("Swiped down")
                case UISwipeGestureRecognizer.Direction.up:
                    print("Swiped up")
                default:
                    break
            }
        }
    }

При запуске я получаю

Поток 1: EXC_BAD_ACCESS (код = 2, адрес = 0x7ffee7146fe8)

в строке let swipeDown в функции loadView.

Я использую Xcode 11. Чтоя здесь скучаю?

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Вы изменили неправильный метод:

override func loadView() {

Вы имели в виду:

override func viewDidLoad() {
0 голосов
/ 01 октября 2019

Да, если в вашем коде отсутствует super.loadView (), вы должны создать жесты в viewDidLoad вместо loadView.

  override func loadView() {
    super.loadView() // ---> In this case always in the second line
    let swipeDown = UISwipeGestureRecognizer(
      target: self,
      action: #selector(self.respondToSwipeGesture)
    )
    swipeDown.direction = UISwipeGestureRecognizer.Direction.down
    self.view.addGestureRecognizer(swipeDown)

    let swipeUp = UISwipeGestureRecognizer(
      target: self,
      action: #selector(self.respondToSwipeGesture)
    )
    swipeUp.direction = UISwipeGestureRecognizer.Direction.up
    self.view.addGestureRecognizer(swipeUp)
  }

  @objc private func respondToSwipeGesture(gesture: UIGestureRecognizer) {
    if let swipeGesture = gesture as? UISwipeGestureRecognizer {
      switch swipeGesture.direction {
      case UISwipeGestureRecognizer.Direction.down:
        print("Swiped down")
      case UISwipeGestureRecognizer.Direction.up:
        print("Swiped up")
      default:
        break
      }
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...