Объективный объект C не распознается в функции C - PullRequest
0 голосов
/ 02 августа 2011

Я добавляю прослушиватель свойства аудио сеанса для kAudioSessionProperty_AudioRouteChange, и в обратном вызове я хочу вызвать функцию takePicture UIImagePickerController.Проблема в том, что я не могу получить доступ к своему средству выбора в обратном вызове.

Я инициализирую свой инструмент выбора в viewDidLoad.Я пытался объявить средство выбора как частным и общедоступным объектом и получить доступ с помощью средства выбора или self.picker, но оно всегда выдает ошибку «Использование необъявленного идентификатора».Я использую этот код для добавления прослушивателя:

AudioSessionInitialize(nil, nil, nil, nil);
AudioSessionSetActive(true);
AudioSessionAddPropertyListener(
                                kAudioSessionProperty_AudioRouteChange,
                                applicationAudioRouteDidChange,
                                self);

Это мой обратный вызов:

void applicationVolumeDidChange(void *inClientData,
                                AudioSessionPropertyID inID,
                                UInt32 inDataSize, const void *inData)
{
    NSLog(@"Volume changed");
    //[picker takePicture]; Error

}

Я также объявил NSArray, чтобы увидеть, если это проблема только с UIImagePickerController, но массивтакже выдает ту же ошибку.

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Последний параметр AudioSessionAddPropertyListener() есть, поэтому вы можете передать в обратный вызов все, что захотите.

 OSStatus AudioSessionAddPropertyListener (
       AudioSessionPropertyID         inID,
       AudioSessionPropertyListener   inProc,
       void                           *inClientData
    );

Вы передаете self , поэтому в обратном вызове void *inClientDataПараметр является указателем на любой объект self .

Если self был экземпляром UIImagePickerController, тогда

UIImagePickerController *picker = inClientData;
[picker takePicture];
1 голос
/ 02 августа 2011

Ваши обратные вызовы должны быть функциями C, а не методами Objective-C. Они не совместимы. Смотрите эту ссылку .

...