以下に示すコードをARC互換に変更しました。
Xcodeが提案したように変更しましたが、Xcodeでエラーが表示されません。しかし、イベントが発生すると、コードはクラッシュします。誰かがこれを修正するアイデアを持っていますか?
このクラッシュがアカペラ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];
}
}