2016-04-14 23 views
1

Bazı kodlarımı temizlemeye çalışıyorum ve daha karmaşık işlevlere sahip ifadeler uzun süre değiştirin. Bu durumda, iki etiketi güncellemek için "pickerSelectedName" değişkenini istiyorum, ancak şu anda aşağıda oluşturduğum işlev programa çarpıyor.Kilitlenme: "Konu 1: EXC_BAD_ACCESS"?

hata kodu - Konu 1: EXC_BAD_ACCESS (kod = 2, adres = 0xbf784ffc)

Ne yazık ki hala hızlı ve Xcode için yeni, bu yüzden debugger ile harika değilim ... Birisi acaba Bunun neden çöktüğünü açıklamaya yardımcı olabilir?

Kişi

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 hiçbir tanımlanmış olan bir koleksiyonda aynı tip ait tuşları ve aynı tip ait değerleri arasında

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 (animasyonlu: Bool) yönteminde,' selectedName 'özelliğini bildirdiğiniz yeri bulamadım. Bazı kodlarını atladın mı yoksa kasten mi yaptın? – Leviathlon

+0

Ayrıca "İnsanlar" geçerli bir sınıf adı değil, insanlar sınıf isimleri için tekil isimler kullanma eğilimindedir, çünkü bu bir çanta sınıfı değildir. 'Kişi' gitmek için yoldur. – Leviathlon

+0

oh, pardon ... bu seçici seçilmelidirSelectedName. Yeni güncelledim, iyi buldum. – sMk

cevap

1

bir sözlük depolar dernekler sipariş. Her şeyden önce aşağıdaki sözdizimi, yukarıdaki sözlük tanımı ile yanlıştır.

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

İkinci şey Kişiler iç sınıfları yanı sıra İnsanların alt sınıflar olarak sınıflarını (Bob Joe ve Tom) bildiriyorlar nesne yönelimli programming.Since kavramları üzerine yeniden işleme geçiniz. Lütfen her seferinde bir şey yapın.

+0

biraz daha ayrıntıya girer misiniz? sözlük, String türünde ve Kişi tipindeki doğru değerleri içerir. – sMk