Проблема: Моя необязательная переменная - ноль. (Фатальная ошибка при распаковке) - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь обновить UILabel.

@IBOutlet weak var balanceLabel: UILabel!

изначально объявлено как необязательная переменная:

var balanceValue: Int = 1

UILabel зависит от необязательной переменной balanceValue.

func updateBalanceLabel() {
        balanceLabel.text = String(balanceValue) }

Это все работало нормально, но в какой-то момент я получил эту фатальную ошибку, которая не исчезла go:

Поток 1: Неустранимая ошибка: Неожиданно найдено ноль, пока неявное развертывание необязательного значения

Ошибка относится к этой строке:

balanceLabel.text = String (balanceValue)

Это делает не имеет никакого смысла ... У меня есть необязательная переменная, которая объявлена ​​как 1 по умолчанию. Как это может быть ноль.

Вот аварийный журнал:

> libswiftCore.dylib`_swift_runtime_on_report:
->  0x7fff51b801c0 <+0>: pushq  %rbp 
    0x7fff51b801c1 <+1>: movq   %rsp, %rbp
    0x7fff51b801c4 <+4>: popq   %rbp
    0x7fff51b801c5 <+5>: retq   
    0x7fff51b801c6 <+6>: nopw   %cs:(%rax,%rax)

и

ibswiftCore.dylib`Swift._assertionFailure(_: Swift.StaticString, _: Swift.String, file: Swift.StaticString, line: Swift.UInt, flags: Swift.UInt32) -> Swift.Never:
    0x7fff518d9370 <+0>:  pushq  %rbp
    0x7fff518d9371 <+1>:  movq   %rsp, %rbp
    0x7fff518d9374 <+4>:  movl   0x28(%rbp), %eax
    0x7fff518d9377 <+7>:  movl   0x18(%rbp), %r10d
    0x7fff518d937b <+11>: pushq  %rax
    0x7fff518d937c <+12>: pushq  0x20(%rbp)
    0x7fff518d937f <+15>: pushq  %r10
    0x7fff518d9381 <+17>: pushq  0x10(%rbp)
    0x7fff518d9384 <+20>: callq  0x7fff51adf410            ; function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded> of Swift._assertionFailure(_: Swift.StaticString, _: Swift.String, file: Swift.StaticString, line: Swift.UInt, flags: Swift.UInt32) -> Swift.Never
->  0x7fff518d9389 <+25>: addq   $0x20, %rsp
    0x7fff518d938d <+29>: ud2    
    0x7fff518d938f <+31>: nop

Что меня раздражает, что я не изменил рабочий код, но теперь внезапно у меня возникает эта проблема. Перезапуск XCode не решит проблему. Пробовал разные вещи, чтобы определить проблему, но я не могу найти причину, почему balanceValue должно быть равно нулю. Любая помощь с благодарностью.

Ответы [ 2 ]

1 голос
/ 28 января 2020

Проверьте balanceLabel, если ноль или нет, balanceValue не является обязательным, поэтому ошибка, которую вы получаете, связана только с balanceLabel. Используйте метод удара


func updateBalanceLabel() {

     guard let label = self.balanceLabel else{
       print("balanceLabel found nill ")
       return 
   }
    label.text = String(balanceValue)


}

После выполнения этого, если вы получаете balanceLabel found nill, вы должны проверить розетку и подключить ее к UILabel в раскадровке.

0 голосов
/ 28 января 2020

Это nil, потому что ваша розетка сломана. Поскольку вы объявили его как неявно развернутый необязательный параметр, balanceLabel.text = String(balanceValue) совпадает с balanceLabel!.text = String(balanceValue). Вы можете убедиться, что это действительно так, просто используя необязательное развертывание (неявно развернутое необязательное все еще является необязательным): balanceLabel?.text = String(balanceValue). Go в вашу раскадровку, щелкните правой кнопкой мыши на ярлыке и посмотрите на соединения. разорвать все существующие соединения, а затем воссоздать привязку к вашей переменной.

...