2016-04-14 4 views
1

Я пытаюсь очистить часть своего кода и заменить длинные операторы if более сложными функциями. В этой ситуации я хочу, чтобы переменная «pickerSelectedName» обновляла две метки, но прямо сейчас функция, которую я создал ниже, сбрасывает программу.Сбой: «Thread 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 (анимированный: Bool)' я не мог найти, где вы объявили свойство 'selectedName'. Вы опустили какой-то из своих кодов или сделали это намеренно? – Leviathlon

+0

Кроме того, «Люди» не являются жизнеспособным именем класса, люди склонны использовать существительные-одиночки для имен классов, так как это не класс мешков. «Человек» - это путь. – Leviathlon

+0

ой, извините ... это должно было быть pickerSelectedName. Я просто обновил, хорошо нахожу. – sMk

ответ

1

словаря хранит ассоциации между ключей одного и того же типа и значений одного и того же типа в коллекции с не определен упорядоченность. Прежде всего, следующий синтаксис неверен в вышеупомянутой защите словаря.

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

Вторая вещь, пожалуйста, переделывают на концепции объектно-ориентированного programming.Since вы декларировании классов (Боб, Джо и Том), как внутренние классы людей, а также подклассы людей. Пожалуйста, сделайте одно за раз.

+0

не могли бы вы немного подробнее остановиться? словарь содержит ключи типа String и значения типа Person correct? – sMk