【问题标题】:Thread 1: EXC_BAD_ACCESS (code=1, address=0x48) - broken with iOS13.1 (dev build 2)线程 1: EXC_BAD_ACCESS (code=1, address=0x48) - 被 iOS13.1 破坏了 (dev build 2)
【发布时间】:2020-01-08 19:48:11
【问题描述】:

所以,我昨天将我的 iPhone 6S 更新到 iOS13.1 的第二个开发版本,突然我的应用程序(在应用程序商店中,Connect 应用程序上显示 0 次崩溃)在运行时无法运行我的设备。但它确实在 Xcode 的模拟器中工作。我使用的是 Xcode 10.3,但 Xcode 11 测试版做同样的事情,模拟器也可以在测试版上运行(尽管它们以其他方式破坏了我的应用程序)。

当我点击一个按钮时,本应将我带到所点击按钮的详细视图时,我收到此错误:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x48)

这段代码是什么

// sets up the audio for use in the app --------------------------------------------------------------//
        let GetReady = Bundle.main.path(forResource: “Get_Ready_up9db”, ofType: “m4a”)
        // this tells the compiler what to do when action is received
        do {
            audioPlayer_GetReady = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: GetReady! )) // Thread 1: EXC_BAD_ACCESS (code=1, address=0x48)
            try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category(rawValue: convertFromAVAudioSessionCategory(AVAudioSession.Category.ambient)))
            try AVAudioSession.sharedInstance().setActive(true)
        }
        catch{
            print(error)
        }

我不知道它为什么会突然出现这种情况,但因为我想不通,我有点害怕,因为我确信 iOS 13 很快就会发布。

请帮忙!

【问题讨论】:

  • Xcode 提供了一个强大的调试器。我们鼓励您使用它。而且 - 与问题无关 - Bundle 中有 url(forResource:withExtension:) 以避免创建 URL 的额外步骤。
  • 是的,我不是真正的开发人员。我是一个 UX 设计师,买不起真正的开发人员,所以我尝试自己做。这就是为了解释我无法弄清楚如何在 Xcode 中使用调试器控件,而不仅仅是设置蓝色标志然后单步执行,直到错误发生。我如何弄清楚如何解决它,或者在这之后我真正告诉我的一切。

标签: iphone ios13 swift5


【解决方案1】:

如果您在它的声明中启动了“audioPlayer_GetReady”,如下所示:

var audioPlayer_GetReady = AVAudioPlayer()

尝试重组以仅声明它的类型:

var audioPlayer_GetReady: AVAudioPlayer

您现在需要在您的类的 init-method 中对其进行初始化,或者,如果您确定它会在对其进行任何引用之前在其他地方进行初始化,请用感叹号声明它:

var audioPlayer_GetReady: AVAudioPlayer!

【讨论】:

  • 是的,我就是这样做的,但是当我将其更改为您的建议时,我收到以下错误:类级别错误“类 'BoxingReadyViewController' 没有初始化程序”,然后是 vars“1.没有初始值的存储属性“audioPlayer_Bell”会阻止合成初始化程序”
  • 谢谢@user1755137,这个答案为我解决了这个问题:重组声明只声明类型+实例化到init方法而不是稍后实例化。
  • 很遗憾,我无法得到您的任何建议。我已经更新到最新的 iOS 13.1 db 3(2019 年 9 月 10 日发布)和 Xcode 11 的 GA,它仍然适用于 Xcode 模拟程序,但不适用于我的实际 iPhone 6S(iOS 13.1 db3)。如果我将 vars 更改为“:AVAudioPlayer”而不是“= AVAudioPlayer()”,我会在“Class 'BoxingReadyViewController” has no initializers 类上得到一个错误,在用你的任何一个建议更新我的 init 后仍然是一个错误。第一个建议错误:“无法在没有参数的情况下调用'路径'' Opt2 没有错误,但该类仍然没有初始化错误:(
  • 尝试在你的类中添加一个init方法,而不是直接初始化你的属性。
  • 我想通了。您最初的回答是 99% 正确...“var audioPlayer_GetReady: AVAudioPlayer”。 1%是在末尾添加感叹号“var audioPlayer_GetReady: AVAudioPlayer!” “!”的简单添加解决了这一切。愚蠢、愚蠢的 Xcode 以及它们如何自动将代码从以前的 swift 版本迁移到苹果的最新版本。它总是几乎很好,但事实并非如此。现在我必须弄清楚为什么我的 SystemDefaults 在保存后没有更新屏幕。感谢您的帮助@user1755137
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 2020-12-06
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多