Objective C对象在C函数中不被识别



我正在为kAudioSessionProperty_AudioRouteChange添加一个音频会话属性监听器,在回调中我想调用UIImagePickerController的takePicture函数。问题是我不能在回调中访问我的picker。

我在viewDidLoad中初始化我的picker。我已经尝试将picker声明为私有和公共对象,并使用picker或self访问。选择器,但它总是给出"使用未声明的标识符"错误。我使用以下代码添加侦听器:

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的问题但数组也给出了相同的错误

AudioSessionAddPropertyListener()的最后一个参数在那里,因此您可以将任何您喜欢的参数传递到回调中。

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

您正在传递self,因此在回调中void *inClientData参数是指向self对象的指针。

如果self是UIImagePickerController的一个实例,那么,

UIImagePickerController *picker = inClientData;
[picker takePicture];

你的回调函数必须是C函数,而不是Objective-C方法。这些不兼容。

相关内容

  • 没有找到相关文章