2016-04-14 118 views
1

我想清理一些我的代码,并用更复杂的函数替换long if语句。在这种情况下,我希望变量“pickerSelectedName”更新两个标签,但现在我下面创建的函数会使程序崩溃。崩溃:“线程1:EXC_BAD_ACCESS”?

错误代码 - 主题1:EXC_BAD_ACCESS(代码= 2,地址= 0xbf784ffc)

可惜我还是新的快捷和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 
    } 
} 
+0

在你的'viewWillAppear(animated:Bool)'方法中,我找不到你声明属性'selectedName'的地方。你有没有忽略你的一些代码,或者你是否有意? – Leviathlon

+0

另外'People'不是一个可行的类名,人们倾向于使用单数名词来表示类名,因为它不是一个包类。 “人”是要走的路。 – Leviathlon

+0

哦,对不起......它应该是pickerSelectedName。我刚刚更新,很好找。 – sMk

回答

1

相同类型的密钥和相同类型值的集合中没有定义之间的字典中存储的关联排序。 首先下面的语法与上面对字典的定义是错误的。

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

第二件事请返工面向对象programming.Since的您声明类(鲍勃,乔和汤姆)作为人民内部类以及人们的子类的概念。请一次做一件事。

+0

你会介入更多的细节吗?字典中包含String类型的键和Person类型的值是否正确? – sMk

相关问题