Как правильно использовать __bridge для ARC

Я изменил код, показанный ниже, на совместимый с 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 audio SDK, код прерывания звука показан в разделе 9.Прерывания этого PDF-файла.http://www.ecometrixem.com/cms-assets/documents/44729-919017.acapela-for-iphone.pdf

Это скриншот для давки.enter image description here

РЕШЕНО Этот код работает, спасибо.

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];
    }
}

5
задан Richard J. Ross III 10 April 2012 в 21:15
поделиться