Я пытаюсь написать свое первое приложение Swift, и оно отлично работает! ... в симуляторе.Приложение генерирует тональные сигналы через AVFoundation, и оно хорошо работает, когда я начинаю воспроизводить тональные сигналы на iPhone, но как только я пытаюсь остановить AVAudioPlayerNode, мое приложение для iPhone 5 из 10 раз зависает.В симуляторе все работает идеально.
Вот код остановки:
@IBAction func togglePlay(_ sender: UIButton) {
if tone.isPlaying {
engine.mainMixerNode.volume = 0.0
tone.stop() // This is where is freezes up and tone is a AVAudioPlayerNode
engine.reset() // engine is a AVAudioEngine
sender.setImage(UIImage(named:"icons8-play-100")!, for: UIControl.State())
} else {
tone.preparePlaying()
tone.play()
engine.mainMixerNode.volume = 1.0
sender.setImage(UIImage(named:"icons8-stop-filled-100")!, for: UIControl.State())
}
Если я приостанавливаю код, когда он останавливается, и смотрю на трассировку стека, то он выглядит как ожидающий.для какого-то Mutex будет выпущен.Но я не достаточно опытен, чтобы уметь разобраться, что я делаю неправильно
Вот трассировка стека:
VFAudio`-[AVAudioPlayerNode stop]:
0x187b68c34 <+0>: stp x22, x21, [sp, #-0x30]!
0x187b68c38 <+4>: stp x20, x19, [sp, #0x10]
0x187b68c3c <+8>: stp x29, x30, [sp, #0x20]
0x187b68c40 <+12>: add x29, sp, #0x20 ; =0x20
0x187b68c44 <+16>: mov x21, x0
0x187b68c48 <+20>: adrp x8, 177438
0x187b68c4c <+24>: add x8, x8, #0x700 ; =0x700
0x187b68c50 <+28>: ldr x19, [x8]
0x187b68c54 <+32>: cbz x19, 0x187b68c70 ; <+60>
0x187b68c58 <+36>: ldr x8, [x19]
0x187b68c5c <+40>: ldr x8, [x8, #0x10]
0x187b68c60 <+44>: mov x0, x19
0x187b68c64 <+48>: blr x8
0x187b68c68 <+52>: mov x20, x0
0x187b68c6c <+56>: b 0x187b68c74 ; <+64>
0x187b68c70 <+60>: mov w20, #0x0
0x187b68c74 <+64>: adrp x8, 177435
0x187b68c78 <+68>: add x8, x8, #0x9dc ; =0x9dc
0x187b68c7c <+72>: ldrsw x8, [x8]
0x187b68c80 <+76>: ldr x21, [x21, x8]
0x187b68c84 <+80>: ldr x8, [x21]
0x187b68c88 <+84>: ldr x8, [x8, #0x198]
0x187b68c8c <+88>: mov x0, x21
0x187b68c90 <+92>: blr x8
0x187b68c94 <+96>: ldr x0, [x21, #0x8] <— This is where it breaks
libsystem_kernel.dylib`__psynch_mutexwait:
0x181c15134 <+0>: mov x16, #0x12d
0x181c15138 <+4>: svc #0x80
-> 0x181c1513c <+8>: b.lo 0x181c15154 ; <+32>
Каким будет следующий шаг в отладке?