崩溃:“主题1:EXC_BAD_ACCESS”?

时间:2016-04-14 16:35:54

标签: ios xcode swift multithreading

我正在尝试清理我的一些代码并用更复杂的函数替换long 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
        }
    }
}

的ViewController

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
    }
}

1 个答案:

答案 0 :(得分:1)

字典在没有定义排序的集合中存储相同类型的键和相同类型的值之间的关联。 首先,以下语法对字典的定义是错误的。

 let nameList:Dictionary = ["Bob":Bob(),"Joe":Joe(),"Tom":Tom()]

第二件事就是重写面向对象编程的概念。因为你将类(Bob,Joe和Tom)声明为People的内部类以及People的子类。请一次做一件事。