我正在尝试创建一个简单的应用程序,它由一个导航控制器和两个由单个UIViewController类控制的屏幕组成。应用程序将允许用户在文本字段中输入一个从0到10的数字,当用户按下按钮时,他们将被带到第二个屏幕,显示他们是否猜到了随机生成的数字。当我在第二个屏幕中访问标签的文本属性时,会出现“unexpected found nil while unwrapping an Optional value”错误。我不明白为什么,我把标签和班级联系起来了。有什么建议吗?
这是我的用户界面:
这是我的导航控制器类代码:
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.
}
}
最佳答案
实际上,问题是您在不传递数据的情况下从一个通用视图控制器实例推送到另一个通用视图控制器实例。通常不建议以这种方式使用UIViewController的泛型子类。如果您希望代码按原样工作,请将UILabel放在与其他UI相同的视图中,不要分段(即只有一个GenericViewController实例)。或者创建UIViewController的两个子类,一个称为“GuessViewController”,另一个称为“AnswerViewController”,并在prepareForSegue中在它们之间传递guess值。GuessViewController将处理从用户获取字符串并对其求值。无论是对是错,AnswerViewController都会这么做。通常也不需要子类UINavigationController。您可以将该代码放在GuessViewController的viewDidLoad中。