Ho modificato il codice mostrato di seguito in ARC compatibile.Come utilizzare correttamente __bridge per ARC
L'ho appena modificato come suggerito da Xcode e non mostra errori su Xcode. Ma il codice si schiaccia quando si verifica l'evento. Qualcuno ha un'idea per risolvere questo problema?
Non sono sicuro se questa cotta si verifica a causa dell'acapela SDK o no.
Questo non è codice ARC, funziona correttamente.
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];
}
}
Questo è ARC compatibile, ma schiaccia su [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];
}
}
Ulteriori informazioni. Sto usando Acapela audio SDK, il codice di interruzione audio è mostrato sul 9.Interruzioni di questo PDF. http://www.ecometrixem.com/cms-assets/documents/44729-919017.acapela-for-iphone.pdf
Questo è lo screenshot per la cotta.
risolto Questo codice funziona, grazie.
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];
}
}
__bridge_retained è per gli oggetti CF e oggetti che richiedono un riferimento deve essere contenuto al loro. __bridge viene utilizzato per NSObjects che non richiedono la conservazione. – CodaFi
Grazie per la tua spiegazione. :) –