Почему моя ссылка на класс AVPlayer в AppDelegate возвращает ноль? - PullRequest
0 голосов
/ 14 марта 2012

Я пытаюсь обработать прерывание потокового аудио, когда пользователь получает вызов, аудио останавливается, затем он должен возобновиться после завершения вызова.

Но моя ссылка на мой класс MyAVPlayer возвращает нольв этих строках кода [myAVPlayer pauseAACStreaming:self]; и [myAVPlayer playACCStreaming:self];, показанных ниже.

Почему это nil, поскольку у меня воспроизводится звук?Есть ли лучший способ сделать это?

Я имею в своем AppDelegate.ha ссылку на пользовательский класс MyAVPlayer, например так:

@class MyAVPlayer;

@interface AppDelegate : NSObject <UIApplicationDelegate> 

{

   MyAVPlayer *myAVPlayer;

} 

@property (nonatomic, retain)  MyAVPlayer *myAVPlayer;

Затем в AppDelegate.m у меня есть:

#import "MyAVPlayer.h"

void AudioSessionInterruptionListenerCallBack(void *inClientData, UInt32 inInterruptionState);

@implementation AppDelegate

@synthesize myAVPlayer;

void AudioSessionInterruptionListenerCallBack (void *inClientData, UInt32 inInterruptionState)
{
    NSLog(@"Audio session interruption");

    MyAVPlayer* streamer = (MyAVPlayer *)inClientData;
    [streamer handleInterruptionChangeToState:inInterruptionState];
}

- (void)applicationWillResignActive:(UIApplication *)application
{

    AudioSessionInitialize (
                            NULL,                         
                            NULL,                          
                            AudioSessionInterruptionListenerCallBack,  
                            self                       
                            );
}



- (void)applicationDidBecomeActive:(UIApplication *)application
{

    AudioSessionInitialize (
                            NULL,                         
                            NULL,                          
                            AudioSessionInterruptionListenerCallBack,  
                            self                       
                            );
}


- (void)handleInterruptionChangeToState:(AudioQueuePropertyID)inInterruptionState 
{

     NSLog(@"handleInterruptionChangeToState");

    if (inInterruptionState == kAudioSessionBeginInterruption)
    { 
        [myAVPlayer pauseAACStreaming:self];  
    }

    else if (inInterruptionState == kAudioSessionEndInterruption) 
    {
        AudioSessionSetActive( true );

               [myAVPlayer playACCStreaming:self];      
    }
}

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Это потому, что вы на самом деле никому не выделяете переменную экземпляра!

1 голос
/ 14 марта 2012

Проблема в том, что у вас есть свойство с именем myAVPlayer, но переменная, которую вы назначаете с помощью строки:

MyAVPlayer* streamer = (MyAVPlayer *)inClientData;

Вместо этого вы должны использовать:

self.myAVPlayer = (MyAVPlayer *)inClientData;
...