2016-04-14 115 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

相關問題