我正在尝试使用以下方法将音频单元的参数存储到 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 DictionaryWithDictionary:
调用,我一直得到 exc_bad_access。
我这样称呼这个方法。
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_ParameterData 已经是 CFDictionaryRef*,因此您不需要分配任何内容。
您确实需要将 CFDictionaryRef(未取消引用)的指针传递给 AudioUnitGetProperty。所以第二行应该是:
err= AudioUnitGetProperty (m_aEffectNodes[nEffectID].audioUnit, kAudioUnitProperty_ClassInfo, kAudioUnitScope_Global, 0, (void*)pcfDictRef_ParameterData, pun32DataSize);
相反。
关于objective-c - 如何将 cfdictionaryref 存储到 NSDictionary 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5942705/