0

我正在尝试更新 UILabel。

@IBOutlet weak var balanceLabel: UILabel!

它最初被声明为非可选变量:

var balanceValue: Int = 1

UILabel 依赖于非可选变量 balanceValue。

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

这一切都很好,但在某些时候我得到了这个致命的错误,它不会消失:

线程 1:致命错误:在隐式展开可选值时意外发现 nil

错误是指这一行:

balanceLabel.text = 字符串(平衡值)

这没有任何意义......我有一个非可选变量,默认声明为 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 应该为零的原因。非常感谢任何帮助。

4

2 回答 2

1

检查balanceLabel是否为零,balanceValue不是可选的,因此您得到的错误只是由于balanceLabel。使用吹法


func updateBalanceLabel() {

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


}

执行此操作后,如果您收到balanceLabel found nill,则应检查插座并将其连接到情节提要中的 UILabel。

于 2020-01-28T06:35:48.657 回答
0

因为你的nil插座坏了。由于您将其声明为隐式展开的可选项,balanceLabel.text = String(balanceValue)因此与balanceLabel!.text = String(balanceValue). 您可以通过简单地使用可选展开来验证这是真的(隐式展开的选项仍然是可选的)balanceLabel?.text = String(balanceValue):进入故事板,右键单击标签并查看连接。断开任何现有连接,然后重新创建与变量的绑定。

于 2020-01-28T06:32:59.627 回答