线程 1 变得奇怪:EXC_BAD_ACCESS(代码=1,地址=0x9)swift 中的崩溃错误

getting strange Thread 1: EXC_BAD_ACCESS (code=1, address=0x9) crash error in swift

我正在为 MyClass 编写单元测试。考虑以下代码:

MyClass.swift

class MyClass {    
    let collectionPeriod: TimeInterval
    var previousCollectDate: Date?

    init(period: TimeInterval, previousCollectDate: Date?) {
        self.collectionPeriod = period
        self.previousCollectDate = previousCollectDate
    }

    func schedule() { }

    func collect() { }
}

MyClassTests.swift

import XCTest
@testable import MyModule

class CollectableTests: XCTestCase {

    var sut: MyClass!

    override func setUp() { }

    override func tearDown() {
        self.sut = nil
    }

    func testSchedule_NotScheduledBefore_CollectExecutesAfterCollectionPeriod() {
//        let _ = Collectable(period: 11, previousCollectDate: nil)

        self.sut = MockCollectable(suiteName: self.testSuiteName)

        self.sut?.schedule()
    }
}

class MockCollectable: Collectable {

    init(suiteName: String) {
        super.init(period: 5.0, previousCollectDate: Date())
    }    
}

这里发生了奇怪的事情,当我在这种情况下执行测试时,我在 self.sut = MockCollectable(suiteName: self.testSuiteName) 但是当我添加(取消注释)行时 let _ = Collectable(period: 11, previousCollectDate: nil) 从字面上看,除了创建一个在代码中未使用的实例外什么都不做,崩溃消失了。有什么想法吗?

也许调试导航器信息会有用:

#0  0x00000001d0dd2aec in swift_checkMetadataState ()
#6  0x0000000104858398 in type metadata accessor for CollectableTests.MockCollectable ()
#7  0x00000001048582c8 in CollectableTests.testSchedule_NotScheduledBefore_CollectExecutesAfterCollectionPeriod() 
#51 0x00000001c7a49d0c in UIApplicationMain ()
#52 0x00000001025882b0 in main 

我不知道为什么会这样,我也不知道为什么下面的解决方案适用于它。如果有人有更多信息,我将很高兴知道。

解决方案 在 Xcode 中检查 Allow testing Host Application APIs 的测试目标,修复了错误。