2016-02-27 50 views
1

我有一个UILabel在modelviewcontroller内。 我想要做的是在我的代码的某个点上更改文本。问题是,它工作在第一点和停止工作的第二个,抛出了以下错误:Swift:意外地发现零,同时展开一个可选的值在更新标签时

unexpectedly found nil while unwrapping an Optional value 

我发现了同样的错误等问题,但这些解决方案不是为我工作。也许我在选择权上做错了什么。

这里是我的模型视图控制器的代码:

import UIKit 

class CheckInViewController: UIViewController { 

@IBOutlet weak var test: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

override func viewDidAppear(animated: Bool) { 
    print("Appeared") 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = storyboard.instantiateViewControllerWithIdentifier("scanViewController") as! ScanViewController 

    test.text = "Here it works" // FIRST POINT WORKS AND CHANGES THE LABEL 

    if let qrCode = vc.qrCode{ // vc.qrCode IS AN OPTIONAL 

     qrRead(qrCode) 
     vc.qrCode = nil 
    } 


} 

func qrRead(qrCode: String) { 

    print(qrCode) 

    test.text = "Here it doesnt work" // HERE IT STOPS WORKING 
} 
+0

检查您的插座是否正确连接? –

+0

@EICaptain如果没有连接,则初始设置将不起作用。 – Woodstock

+0

@Woodstock是对的。但是被正确地附上 –

回答

0

你把它传递给func qrRead(qrCode: String)功能后直接设置vc.qrCodenil

删除此行:vc.qrCode = nil并检查错误是否持续。

如果没有,正如我怀疑的那样,在其他地方没有var。

请记住使用如果让,你实际访问底层实例,而不是副本。

因此,当你设置vc.qrCode为零,你也QRCODE设置为零当您尝试打印在qrRead功能

例导致的问题:

class Person { 

} 

var a:Person? = Person() 

if let some = a 
{ 
    print(unsafeAddressOf(some)) 
    print(unsafeAddressOf(a!)) 
} 

打印:

0x0000000005011ed0 

0x0000000005011ed0 

这都说明他们是在内存中相同实例。

+0

它不起作用...同样的错误 –

+0

我同意WoodStock的回答。如果愿意,永远不要尝试将值设置为零。回到你的问题,你还没有叫super.viewDidAppear(animated:animated)。尝试添加并检查问题是否存在。 – Varun

相关问题