我将下面显示的代码更改为与 ARC 兼容。
我只是按照 Xcode 的建议对其进行了更改,并且在 Xcode 上没有显示错误。但是一旦事件发生,代码就会崩溃。有没有人有解决这个问题的想法?
我不确定这种暗恋是否是因为 acapela SDK 而发生的。
这是非 ARC 代码,它工作正常。
void MyInterruptionListener(void *inClientData, UInt32 inInterruptionState) {
AcapelaSpeech* anAcapelaSpeech = *(AcapelaSpeech**)inClientData;
if (inInterruptionState == kAudioSessionBeginInterruption) {
[anAcapelaSpeech setActive:NO];
status = AudioSessionSetActive(NO);
}
if (inInterruptionState == kAudioSessionEndInterruption) {
status = AudioSessionSetActive(YES);
[anAcapelaSpeech setActive:YES];
}
}
这是 ARC 兼容的,但它对 [anAcapelaSpeech setActive:NO]; 很不利。
void MyInterruptionListener(void *inClientData, UInt32 inInterruptionState) {
AcapelaSpeech* anAcapelaSpeech = (__bridge_transfer AcapelaSpeech*)inClientData;
if (inInterruptionState == kAudioSessionBeginInterruption) {
[anAcapelaSpeech setActive:NO];
AudioSessionSetActive(NO);
}
if (inInterruptionState == kAudioSessionEndInterruption) {
AudioSessionSetActive(YES);
[anAcapelaSpeech setActive:YES];
}
}
附加信息。 我正在使用 Acapela 音频 SDK,音频中断代码显示在此 PDF 的 9.Interruptions 中。 http://www.ecometrixem.com/cms-assets/documents/44729-919017.acapela-for-iphone.pdf
这是暗恋的截图。
已解决 此代码有效,谢谢。
void MyInterruptionListener(void *inClientData, UInt32 inInterruptionState) {
AcapelaSpeech *anAcapelaSpeech = (__bridge id) (*(void **) inClientData);
if (inInterruptionState == kAudioSessionBeginInterruption) {
[anAcapelaSpeech setActive:NO];
AudioSessionSetActive(NO);
}
if (inInterruptionState == kAudioSessionEndInterruption) {
AudioSessionSetActive(YES);
[anAcapelaSpeech setActive:YES];
}
}