C 函数中无法识别 Objective C 对象

发布于 2024-11-27 17:21:24 字数 926 浏览 2 评论 0原文

我正在为 kAudioSessionProperty_AudioRouteChange 添加音频会话属性侦听器,并且在回调中我想调用 UIImagePickerController 的 takePicture 函数。问题是我无法在回调中访问我的选择器。

我正在 viewDidLoad 中初始化我的选择器。我尝试将选择器声明为私有和公共对象,并使用 picker 或 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 的问题,但该数组也给出了相同的错误。

I am adding an Audio session property listener for kAudioSessionProperty_AudioRouteChange and in the callback I want to call the takePicture function of UIImagePickerController. The problem is that I cannot access my picker in the callback.

I am initializing my picker in viewDidLoad. I have tried declaring the picker as both a private and public object and accessing with picker or self.picker but it always gives the "Use of undeclared identifier" error. I use this code to add the listener:

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

This is my callback:

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

}

I also declared an NSArray to see if this was the problem with UIImagePickerController only but the array also gives the same error.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜柠檬 2024-12-04 17:21:24

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

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

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

如果 self 是 UIImagePickerController 的实例,

UIImagePickerController *picker = inClientData;
[picker takePicture];

The last parameter of AudioSessionAddPropertyListener() is there so you can pass whatever you like into the callback.

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

You are passing self so within the callback the void *inClientData parameter is a pointer to whichever object self is.

If self was an instance of UIImagePickerController then,

UIImagePickerController *picker = inClientData;
[picker takePicture];
瑾夏年华 2024-12-04 17:21:24

您的回调必须是 C 函数,而不是 Objective-C 方法。这些不兼容。请参阅此链接

Your callbacks must be C functions, not Objective-C methods. These are not compatible. See this link.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文