问题:我的非可选变量是零。 (展开时出现致命错误)
Problem: My non optional variable is nil. (Fatal Error while unwrapping)
我正在尝试更新 UILabel。
@IBOutlet weak var balanceLabel: UILabel!
最初声明为非可选变量:
var balanceValue: Int = 1
UILabel 依赖于非可选变量 balanceValue。
func updateBalanceLabel() {
balanceLabel.text = String(balanceValue) }
一切正常,但在某些时候我遇到了这个不会消失的致命错误:
Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
错误是指这一行:
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 [=14=]x20, %rsp
0x7fff518d938d <+29>: ud2
0x7fff518d938f <+31>: nop
让我感到奇怪的是,我没有更改工作代码,但现在我突然遇到了这个问题。重新启动 XCode 不会解决问题。尝试了不同的方法来确定问题所在,但我找不到 balanceValue 应该为零的原因。非常感谢任何帮助。
是nil
因为你的插座坏了。由于您将其声明为隐式展开的可选,因此 balanceLabel.text = String(balanceValue)
与 balanceLabel!.text = String(balanceValue)
相同。您可以通过简单地使用可选展开来验证这是真的(隐式展开的可选仍然是可选的):balanceLabel?.text = String(balanceValue)
。进入你的故事板,右键单击标签并查看连接。断开所有现有连接,然后重新创建与变量的绑定。
检查 balanceLabel
是否为 nil,balanceValue
不是可选的,因此您收到的错误仅是由于 balanceLabel
。使用打击法
func updateBalanceLabel() {
guard let label = self.balanceLabel else{
print("balanceLabel found nill ")
return
}
label.text = String(balanceValue)
}
执行此操作后,如果您得到 balanceLabel found nill
,那么您应该检查插座并将其连接到情节提要中的 UILabel。
我正在尝试更新 UILabel。
@IBOutlet weak var balanceLabel: UILabel!
最初声明为非可选变量:
var balanceValue: Int = 1
UILabel 依赖于非可选变量 balanceValue。
func updateBalanceLabel() {
balanceLabel.text = String(balanceValue) }
一切正常,但在某些时候我遇到了这个不会消失的致命错误:
Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
错误是指这一行:
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 [=14=]x20, %rsp
0x7fff518d938d <+29>: ud2
0x7fff518d938f <+31>: nop
让我感到奇怪的是,我没有更改工作代码,但现在我突然遇到了这个问题。重新启动 XCode 不会解决问题。尝试了不同的方法来确定问题所在,但我找不到 balanceValue 应该为零的原因。非常感谢任何帮助。
是nil
因为你的插座坏了。由于您将其声明为隐式展开的可选,因此 balanceLabel.text = String(balanceValue)
与 balanceLabel!.text = String(balanceValue)
相同。您可以通过简单地使用可选展开来验证这是真的(隐式展开的可选仍然是可选的):balanceLabel?.text = String(balanceValue)
。进入你的故事板,右键单击标签并查看连接。断开所有现有连接,然后重新创建与变量的绑定。
检查 balanceLabel
是否为 nil,balanceValue
不是可选的,因此您收到的错误仅是由于 balanceLabel
。使用打击法
func updateBalanceLabel() {
guard let label = self.balanceLabel else{
print("balanceLabel found nill ")
return
}
label.text = String(balanceValue)
}
执行此操作后,如果您得到 balanceLabel found nill
,那么您应该检查插座并将其连接到情节提要中的 UILabel。