Я пытаюсь сделать функцию, которую я могу вызвать, чтобы обновить мой UILabel scoreLabel.text
. Тем не менее, я получаю сообщение об ошибке, когда я пытаюсь изменить его. Меня смущает то, что я не получаю ошибку при ее изменении внутри viewDidLoad()
. Во все остальном возвращает следующее сообщение об ошибке:Изменение текста UILabel работает только внутри viewDidLoad()
В консоли я также получаю ошибку:
fatal error: unexpectedly found nil while unwrapping an Optional value.
Так что я был ведущим верить, что при вызове моей функции, чтобы обновить текст , представление еще не загрузило UILabel. Но я уверен, что эта функция вызывается только после загрузки .
Вещи я проверил/пытались для:
- Это мой IBOutlet правильно подключен
- Это моя функция в настоящее время под названием
- Использование обоих
scoreLabel.text
иself.scoreLabel.text
- Использование сильных и слабых выходное соединение
Я также уверен, что changeTextLabel
вызывается после того, как scoreLabel
загружается в память. Но опять моя ошибка, похоже, говорит иначе.
Вот полная разметка моего кода. Я удалил некоторые ненужные детали для читаемости:
import UIKit
import SpriteKit
class GameViewController: UIViewController {
@IBOutlet weak var scoreLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//This is where all my other code was
print(scoreLabel.text)
scoreLabel.text = "Testing" //This line can be run
}
func changeTextLabel() {
print("changeTextLabel called")
if self.scoreLabel != nil {
self.scoreLabel.text = "yay"
} else {
print("scoreLabel is nil") //This is called every time
}
}
}
Спасибо за ваше время
Edit:GameScene.swift
Это только та часть, которая должна быть озабоченность
func projectileDidCollideWithMonster(projectile: SKSpriteNode, monster: SKSpriteNode) {
print("Hit")
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let object = storyBoard.instantiateViewController(withIdentifier: "GameViewController") as! GameViewController
object.changeTextLabel()
projectile.removeFromParent()
monster.removeFromParent()
}
вы пытались напечатать 'self.scoreLabel', чтобы проверить его ноль или нет? – Tj3n
где вы вызываете метод changeTextLabel от какого-либо другого контроллера? –
Проверить с помощью контрольных точек, которые сначала вызывается viewdidload, или сначала вызывается changetextlabel. – Windindi