【问题标题】:Crashing: "Thread 1: EXC_BAD_ACCESS"?崩溃:“线程 1:EXC_BAD_ACCESS”?
【发布时间】:2016-04-14 16:35:53
【问题描述】:

我正在尝试清理我的一些代码并将长 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
        }
    }
}

视图控制器

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

【问题讨论】:

  • 在您的 viewWillAppear(animated: Bool) 方法中,我找不到您在哪里声明属性 selectedName。你是省略了一些代码,还是故意写的?
  • 另外People 不是一个可行的类名,人们倾向于使用单数名词作为类名,因为它不是一个包类。 Person 是要走的路。
  • 哦,对不起...应该是pickerSelectedName。我刚刚更新,很好的发现。
  • 能否请您提供它崩溃的线路?
  • 如果你点击 Xcode 中的断点导航器 (cmd+7) 并点击左下角的小加号,你可以添加一个异常断点,它可以让你看到在哪里你的代码崩溃了。

标签: ios xcode swift multithreading


【解决方案1】:

字典将相同类型的键相同类型的值之间的关联存储在一个没有定义排序的集合中。 首先下面的语法与上述字典的定义是错误的。

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

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

【讨论】:

  • 您介意更详细一点吗?字典包含 String 类型的键和 Person 类型的值是否正确?
猜你喜欢
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 2013-05-14
  • 2013-03-24
  • 2010-11-18
  • 2013-01-07
相关资源
最近更新 更多