2015-11-07 45 views
0

我想創建一個簡單的應用程序,由一個導航控制器與2個屏幕由單個UIViewController類控制。該應用程序將允許用戶在文本字段中輸入0到10之間的數字,當用戶按下按鈕時,它們將被帶到第二個屏幕,顯示他們是否猜測隨機生成的數字。當我在第二個屏幕中訪問標籤的文本屬性時,出現「意外地發現零而解包可選值」錯誤。我不明白爲什麼,我把這個標籤與課堂連接起來。任何建議?發現零,而展開可選

這是我的UI: enter image description here

這是我的導航控制器類代碼:

class MyNavController: UINavigationController { 
var ranNum:Int = 0 

override func viewDidLoad() { 
    super.viewDidLoad() 

    ranNum = (Int)(arc4random_uniform(10)) 

    NSLog("random number: \(ranNum)") 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

} 

這是我的通用視圖控制器類:

class GenericViewController: UIViewController { 
@IBOutlet weak var inputTextField: UITextField! 
@IBOutlet weak var outputLabel: UILabel! 

var setThisLabel: String = "You Win!" 

@IBAction func guessTheNumber(sender: AnyObject) { 
    var generatedRanNumber = (parentViewController as! MyNavController).ranNum 
    var userGuessNumer = inputTextField.text.toInt() 

    if generatedRanNumber == userGuessNumer { 
     outputLabel.text = "You Win!" 
    } else if generatedRanNumber < userGuessNumer { 
     outputLabel.text = "Think Less..." 
    } else { 
     outputLabel.text = "Think Big..." 
    } 
} 
override func viewDidLoad() { 
    super.viewDidLoad() 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

} 
+1

「找到將解包可選」。誰是意志,你爲什麼在你打開可選的時候找到他? :)(我猜你的意思是「發現**零**,而解包可選。」) –

+0

公頃,我現在看到拼錯字:D。將它改變。謝謝! :) –

回答

1

之間的數字。通用視圖控制器到另一個不傳遞數據。通常不推薦以這種方式使用UIViewController的通用子類。如果你希望你的代碼按照原樣工作,把UILabel放在與你的其他UI相同的視圖中,不要繼續(即只有一個GenericViewController實例)。或者創建UIViewController的兩個子類,一個名爲「GuessViewController」,另一個名爲「AnswerViewController」,並在prepareForSegue中傳遞它們之間的猜測值。 GuessViewController會處理從用戶處獲取字符串並對其進行評估。 AnswerViewController會判斷它是對還是錯。通常不需要繼承UINavigationController。您可以將該代碼放在GuessViewController的viewDidLoad中。

+0

您對某些建議是正確的。但我不會說**這實際上是導致「意外地發現零,同時展開一個可選值」的問題** ... :) –

+0

我把他所有的代碼都放在Xcode中,只有segue出錯。 – beyowulf

+0

感謝您的建議。我現在就試一試。 :) –

2

變化從

var generatedRanNumber = (parentViewController as! MyNavController).ranNum 

var generatedRanNumber = (navigationController as! MyNavController).ranNum 

還注意到arc4random_uniform(10)返回0到9之間的數字告訴用戶它的猜測其實這個問題是您從一個實例推0和10

+0

感謝您的建議。我做了更改,但問題仍然存在:/我將嘗試創建兩個不同類的UIViewController並使用prepareForSeguey方法。 as-beyowulf建議使用 –

相關問題