2016-02-27 48 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

相關問題