Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Objective c 如何将cfdictionaryref存储到NSDictionary中_Objective C_Nsdictionary_Exc Bad Access_Objective C++ - Fatal编程技术网

Objective c 如何将cfdictionaryref存储到NSDictionary中

Objective c 如何将cfdictionaryref存储到NSDictionary中,objective-c,nsdictionary,exc-bad-access,objective-c++,Objective C,Nsdictionary,Exc Bad Access,Objective C++,我尝试使用以下方法将audiounit的参数存储到NSDictionary中 OSStatus AudioEngineModel::getParameterStateOfEffect(NSInteger nEffectID, CFDictionaryRef * pcfDictRef_ParameterData, UInt32* pun32DataSize) { Boolean outWritable; OSStatus err= AudioUnitGetPropertyInfo(

我尝试使用以下方法将audiounit的参数存储到NSDictionary中

OSStatus AudioEngineModel::getParameterStateOfEffect(NSInteger nEffectID, CFDictionaryRef * pcfDictRef_ParameterData, UInt32* pun32DataSize)
{
    Boolean outWritable;
    OSStatus err= AudioUnitGetPropertyInfo(m_aEffectNodes[nEffectID].audioUnit, kAudioUnitProperty_ClassInfo, kAudioUnitScope_Global, 0, &*pun32DataSize, &outWritable);
    if(err != noErr)
    {
        NSLog(@"ERROR AudioEngineModel::getParameterStateOfEffect:: AudioUnitGetPropertyInfo\n");
        return err;
    }

    *pcfDictRef_ParameterData= (CFDictionaryRef)malloc(*pun32DataSize);

    err= AudioUnitGetProperty (m_aEffectNodes[nEffectID].audioUnit, kAudioUnitProperty_ClassInfo, kAudioUnitScope_Global, 0, (void*)*pcfDictRef_ParameterData, &*pun32DataSize);
    if(err != noErr)
    {
        NSLog(@"ERROR AudioEngineModel::getParameterStateOfEffect:: AudioUnitGetProperty\n");
        return err;
    }    


    m_cfDictRef_ParameterData= *pcfDictRef_ParameterData; 
    m_pdParameterData= [NSDictionary dictionaryWithDictionary:(NSDictionary*)m_cfDictRef_ParameterData];

    return noErr;                               
}
在调用
NSDictionary Dictionary WithDictionary:
之前,一切都很正常,我一直都可以访问exc\u bad\u

我这样称呼这个方法

CFDictionaryRef cfDictRef_ParameterData;
UInt32 un32DataSize;    
OSStatus err= [[[NSApp delegate] getMainController] getParameterStateOfEffect:m_nEffectTypeID parameterData:&cfDictRef_ParameterData dataSize:&un32DataSize];

您的问题在于以下几行:

*pcfDictRef_ParameterData= (CFDictionaryRef)malloc(*pun32DataSize);

err= AudioUnitGetProperty (m_aEffectNodes[nEffectID].audioUnit, kAudioUnitProperty_ClassInfo, kAudioUnitScope_Global, 0, (void*)*pcfDictRef_ParameterData, &*pun32DataSize);
malloc是不必要的。AudioUnitGetProperty将返回kAudioUnitProperty_ClassInfo的CFDictionaryRef。由于pcfDictRef_参数data已经是CFDictionaryRef*,因此不需要分配任何内容

您确实需要将指向CFDictionaryRef(未取消引用)的指针传递给AudioUnitGetProperty。所以第二行应该是:

err= AudioUnitGetProperty (m_aEffectNodes[nEffectID].audioUnit, kAudioUnitProperty_ClassInfo, kAudioUnitScope_Global, 0, (void*)pcfDictRef_ParameterData, pun32DataSize);

相反。

非常感谢您的快速回答。但是,如果我无法访问*pcfDictRef_参数数据的键/值,如何使用CFDictionaryCreate创建CFDictionaryRef。我已经尝试过了,但是调用这些方法会给我带来另一个exc_bad_访问。我还尝试将pcfDictRef_参数data的数据放入一个NSData对象,如下所示:m_pParameterData=[NSData dataWithBytes:(const void)*pcfDictRef_参数data length:*pun32DataSize];它允许我在这里存储数据,但当我调用bytes或getBytes:length时,我会得到另一个exc\u bad\u访问。有什么想法吗?没有意识到呼叫返回了该属性的CFDictionaryRef。那么,如果您放弃malloc调用,只使用:err=AudioUnitGetProperty(m_aEffectNodes[nEffectID].audioUnit,kAudioUnitProperty\u ClassInfo,kAudioUnitScope\u Global,0,(void*)pcfDictRef\u ParameterData,pun32DataSize);另外,为什么在AudioUnitGetPropertyInfo调用中使用&*pun32DataSize(而不仅仅是pun32DataSize)?您是否将AudioUnitGetProperty更改为使用(void*)pcfDictRef_参数数据而不是(void*)*pcfDictRef_参数数据?