Поток 1: EXC_BAD_ACCESS (код = 2, адрес = 0x1134ca968) - PullRequest
0 голосов
/ 02 августа 2020

Я начал кодировать около 2 недель после go и выбрал Swift для iOS целей разработки, и у меня возникли серьезные проблемы с отладкой. Этот проект представляет собой простое приложение Ti c Ta c Toe, и все работает нормально, за исключением случая, когда я нажимаю на один из моих UILabels, чтобы появился X.

Я продолжаю получать этот поток 1: EXC_BAD_ACCESS ( code = 2, address = 0x1134ca968) на моем canTap, и я не знаю, как это исправить.

@IBAction func onTappedGridLabel(_ sender: UITapGestureRecognizer) {
        if gameOver {
            return
        }
        var canPlay = false
        for label in labels {
            let selectedPoint = sender.location(in: background)
            if label.frame.contains(selectedPoint) {
                if label.canTap {
                    if(xTurn) {
                        label.text = "X"
                    }
                    else {
                        label.text = "O"
                    }
                    xTurn = !xTurn
                    label.canTap = false
                    checkForWinner()
                }
            }
            if label.canTap {
                canPlay = true

https://www.dropbox.com/s/amokuept1crt8i0/Tic%20Tac%20Toe%202.0.zip?dl=0 Вот ссылка на весь проект если кому интересно. Думаю, довольно короткое.

1 Ответ

1 голос
/ 02 августа 2020

Проблема в том, что UILabel не имеет свойства canTap. Ваша метка подкласс GridLabel имеет это свойство, но вы не указали, что ваши метки в раскадровке являются экземплярами вашего подкласса меток, поэтому они просто обычные метки.

Другими словами, у вас есть этот код:

@IBOutlet weak var gridLabel0: GridLabel!
@IBOutlet weak var gridLabel1: GridLabel!
@IBOutlet weak var gridLabel2: GridLabel!
@IBOutlet weak var gridLabel3: GridLabel!
@IBOutlet weak var gridLabel4: GridLabel!
@IBOutlet weak var gridLabel5: GridLabel!
@IBOutlet weak var gridLabel6: GridLabel!
@IBOutlet weak var gridLabel7: GridLabel!
@IBOutlet weak var gridLabel8: GridLabel!
var labels = [GridLabel]()

Но вы лжете в каждой из этих строк. Нет ваших ярлыков - это GridLabel. Все они обычные UILabels. Следовательно, как только вы попытаетесь получить доступ к canTap одного из них, вы получите sh.

В раскадровке выберите девять меток сетки и в Инспекторе идентичности измените их класс на GridLabel. Проблема решена.

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