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

Posted

技术标签:

【中文标题】得到奇怪的线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x9)swift中的崩溃错误【英文标题】:getting strange Thread 1: EXC_BAD_ACCESS (code=1, address=0x9) crash error in swift 【发布时间】:2019-10-13 14:28:46 【问题描述】:

我正在为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 11.1 或 swift 5.1 中的一个错误 【参考方案1】:

我不知道为什么会发生这种情况,也不知道为什么下面的解决方案适用。如果有人有更多信息,我会很高兴知道。

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

【讨论】:

以上是关于得到奇怪的线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x9)swift中的崩溃错误的主要内容,如果未能解决你的问题,请参考以下文章

当在两个布局之间快速切换使用 UISegmentedControl 时,我得到一个线程 1 exc_bad_access code=2 错误

React Native Facebook Flipper 线程 9:EXC_BAD_ACCESS(代码=1,地址=0x20...1)

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x8000000000000010)

为啥我在 NSTimer 选择器中得到 EXC_BAD_ACCESS?

NSURLConnectionLoader 线程中的奇怪崩溃

使用 Restkit MainQueueManagedObjectContext 的奇怪崩溃 - EXC_BAD_ACCESS