【发布时间】:2016-04-14 16:35:53
【问题描述】:
我正在尝试清理我的一些代码并将长 if 语句替换为更复杂的函数。在这种情况下,我希望变量“pickerSelectedName”更新两个标签,但现在我在下面创建的函数会使程序崩溃。
错误代码 - 线程 1:EXC_BAD_ACCESS(代码=2,地址=0xbf784ffc)
不幸的是,我还是 swift 和 Xcode 的新手,所以我对调试器不是很好...我想知道是否有人可以帮助解释为什么会崩溃?
人物
class Person {
var name = String()
var age = Int()
let nameList:Dictionary = ["Bob":Bob(),"Joe":Joe(),"Tom":Tom()]
class Bob:Person {
override init() {
super.init()
name = "Bob"
age = 27
}
}
class Joe:Person {
override init() {
super.init()
name = "Joe"
age = 26
}
}
class Tom:Person {
override init() {
super.init()
name = "Tom"
age = 28
}
}
}
视图控制器
class ViewController: UIViewController {
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var ageLabel: UILabel!
var pickerSelectedName = "Bob"
var name = String()
var age = String()
override func viewWillAppear(animated: Bool) {
updateLabel(pickerSelectedName)
}
func updateLabel(name:String) {
var selectedName = String()
var selectedAge = String()
if Person().nameList[name] != nil {
selectedName = (Person().nameList[name]?.name)!
selectedAge = (Person().nameList[name]?.name)!
} else {
selectedName = "Error"
selectedAge = "Error"
}
nameLabel.text = selectedName
ageLabel.text = selectedAge
}
}
【问题讨论】:
-
在您的
viewWillAppear(animated: Bool)方法中,我找不到您在哪里声明属性selectedName。你是省略了一些代码,还是故意写的? -
另外
People不是一个可行的类名,人们倾向于使用单数名词作为类名,因为它不是一个包类。Person是要走的路。 -
哦,对不起...应该是pickerSelectedName。我刚刚更新,很好的发现。
-
能否请您提供它崩溃的线路?
-
如果你点击 Xcode 中的断点导航器 (
cmd+7) 并点击左下角的小加号,你可以添加一个异常断点,它可以让你看到在哪里你的代码崩溃了。
标签: ios xcode swift multithreading