Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在包含AudioToolbox框架的objective-CIOS项目中找不到AudioServices.h_Iphone_Ios_Audiotoolbox - Fatal编程技术网

Iphone 在包含AudioToolbox框架的objective-CIOS项目中找不到AudioServices.h

Iphone 在包含AudioToolbox框架的objective-CIOS项目中找不到AudioServices.h,iphone,ios,audiotoolbox,Iphone,Ios,Audiotoolbox,根据苹果的文档,AudioServices.h应该是AudioToolbox框架的一部分 尽管我已经将AudioToolbox框架添加到我的Xcode项目中,但当我导入AudioServices时,我得到了一个错误:找不到AudioServices.h文件 无论我是否打字,都会发生这种情况 #导入“AudioServices.h” 或 #导入“AudioToolbox/AudioServices.h” 以防万一,我尝试删除然后重新添加AudioToolbox框架,但没有效果。AudioServ

根据苹果的文档,AudioServices.h应该是AudioToolbox框架的一部分

尽管我已经将AudioToolbox框架添加到我的Xcode项目中,但当我导入AudioServices时,我得到了一个错误:找不到AudioServices.h文件

无论我是否打字,都会发生这种情况 #导入“AudioServices.h”

或 #导入“AudioToolbox/AudioServices.h”

以防万一,我尝试删除然后重新添加AudioToolbox框架,但没有效果。AudioServices文件是否会以某种方式损坏?(如果是,有人知道我可以在哪里下载另一份副本吗?)

我使用的是XCode 4.2,但在转换一些旧的开源代码时,该项目被设置为与XCode 3.2兼容。这可能是问题所在吗

我肯定我错过了一些简单的东西。我对编程一无所知。。。感谢您的帮助

-----编辑(见下面我的评论)-----

在AudioServices.h中,有两个功能:

extern OSStatus
AudioSessionInitialize( CFRunLoopRef                        inRunLoop, 
                        CFStringRef                         inRunLoopMode, 
                        AudioSessionInterruptionListener    inInterruptionListener, 
                        void                                *inClientData)              

extern OSStatus
AudioSessionAddPropertyListener(    AudioSessionPropertyID              inID,
                                    AudioSessionPropertyListener        inProc,
                                    void                                *inClientData)
在SpeakHereController.mm(来自示例Apple代码)中,我试图将其转换为ARC,以使其与项目中的其他文件更好地协作:

- (void)awakeFromNib
{       

// Allocate our singleton instance for the recorder & player object
recorder = new AQRecorder();
player = new AQPlayer();


OSStatus error = AudioSessionInitialize(NULL, NULL, interruptionListener, self);
if (error) printf("ERROR INITIALIZING AUDIO SESSION! %ld\n", error);
else 
{
    UInt32 category = kAudioSessionCategory_PlayAndRecord;  
    error = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
    if (error) printf("couldn't set audio category!");

    error = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, propListener, self);
    if (error) printf("ERROR ADDING AUDIO SESSION PROP LISTENER! %ld\n", error);
    UInt32 inputAvailable = 0;
    UInt32 size = sizeof(inputAvailable);

    // we do not want to allow recording if input is not available
    error = AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable, &size, &inputAvailable);
    if (error) printf("ERROR GETTING INPUT AVAILABILITY! %ld\n", error);
    btn_record.enabled = (inputAvailable) ? YES : NO;

    // we also need to listen to see if input availability changes
    error = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioInputAvailable, propListener, self);
    if (error) printf("ERROR ADDING AUDIO SESSION PROP LISTENER! %ld\n", error);

    error = AudioSessionSetActive(true); 
    if (error) printf("AudioSessionSetActive (true) failed");
}
尝试“
#导入
”,看看您的问题是否消失


<和>字符起作用。在“
#import
”中使用双引号意味着您希望编译器搜索“用户标题”,其中尖括号意味着您希望编译器在系统框架中搜索。

问题是,当您使用ARC时,系统无法自动将self强制转换为void*。Self用于AudioSessionInitialize函数(和其他函数)的最后一个参数

您需要告诉ARC如何通过使用_桥手动将内存强制转换为void*来控制内存的所有权。这表示“不要更改内存的所有权”

因此,在对AudioSession函数的调用中将self更改为(uu bridge void*)self

e、 g


这似乎只是我的问题的一部分,其余部分与转换为自动引用计数有关。我仍然收到一个与此框架中的函数相关的错误:调用“AudioSessionInitialize”时没有匹配的函数,但现在在公开三角形中有其他信息:候选函数不可行:无法隐式地将第四个参数的“SpeakHereController*const_u_strong”类型的参数转换为“void*”弧下。我不知道如何解决这个问题,因为它是在一个文件中,我没有写,也不太明白。我将在上面添加代码。
OSStatus error = AudioSessionInitialize(NULL, NULL, interruptionListener, (__bridge void*)self);