【问题标题】:Xcode 7 beta swift app crashes on runtime with EXC_BAD_ACCESS errorXcode 7 beta swift 应用程序在运行时崩溃并出现 EXC_BAD_ACCESS 错误
【发布时间】:2015-06-24 07:25:25
【问题描述】:

我有以下代码崩溃。

class PersonFactory {
  class var build: PersonInterface {
    get {
      return Person()
    }
  }
}

class Person: PersonInterface {
  var age: Int = 0

  func say(message: String) {
    print(message)
  }
}

protocol PersonInterface: class {
  var age: Int { get set }

  func say(message: String)
}

当我从view controller 运行以下行时,它崩溃了:

PersonFactory.build.say("hello")

在以下行var age: Int = 0 上使用EXC_BAD_ACCESS 崩溃。该问题出现在 Xcode 7 beta 4 (7A165t) 中。

请注意,代码不会在 Playground 中崩溃,只有在从应用程序调用它时。这是演示应用程序:https://github.com/exchangegroup/ProtocolCrashDemo

注意:定义 PersonFactory、Person 和 PersonInterface 的代码应该放在一个单独的文件中,以免崩溃。

看起来像 Swift 2.0 的错误?我向 Apple 提交了错误报告。

更新

该问题已在 Xcode 7.0 beta 5 中修复。

【问题讨论】:

  • 尝试将代码放在与视图控制器相同的源文件中。

标签: xcode swift


【解决方案1】:

您可以通过这样做来避免这种崩溃:

import Foundation

class PersonFactory<T: PersonInterface> {
    class var build: T {
        return T()
    }
}

class Person: PersonInterface {
    var age: Int

    required init() {
        age = 0
    }

    func say(message: String) {
        print(message)
    }
}

protocol PersonInterface {
    init()

    var age: Int { get set }

    func say(message: String)
}

let person: Person = PersonFactory.build
person.say("hello")

【讨论】:

  • 顺便问一下,&lt;T: 是什么意思?它的技术术语是什么?它是一个数组列表吗?我是一名学习 Swift 的 Java 人,我一直想了解它的工作原理、用途等,但在 Google 上找不到。
  • 我知道数组的长格式是Array&lt;T&gt;,但是在类声明之后?
  • 在 Swift T 中是一个泛型
【解决方案2】:

错误最有可能,因为我使用的是 Xcode 6.3.2,它看起来不错。

【讨论】:

  • 谢谢,代码在 Playground 中运行没有问题,我在 Xcode 7 中也一样,但在 iOS 应用程序中崩溃。
  • 在模拟器中运行时有什么东西没有被初始化吗?如果有任何 IBOutlets,有时剩余的链接会抛出 exc_bad_access。它们是所有错误中最烦人的。
  • 好点,我尝试用这段代码创建一个新应用程序来隔离案例,这里是视图控制器github.com/exchangegroup/ProtocolCrashDemo/blob/master/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 2022-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多