我遇到了这个错误,因为我只在家里编写 xcode,所以我没有资源可以快速提出最简单的 10 秒问题。所以这是今天出现的一个,我正在使用 AudioSessionAddPropertyListener 函数,我收到了这个警告:
将“CFTypeRef”(又名“const void” )传递给“void”类型的参数会丢弃限定符
从这行代码。
// Registers the audio route change listener callback function
// An instance of the audio player/manager is passed to the listener
AudioSessionAddPropertyListener ( kAudioSessionProperty_AudioRouteChange,
audioRouteChangeListenerCallback, CFBridgingRetain(self) );
那么 AudioSessionAddPropertyListener 的定义是
AudioSessionAddPropertyListener( AudioSessionPropertyID inID,
AudioSessionPropertyListener inProc,
void *inClientData)
我看到 *inClientData 变量似乎是 void 类型(或者可能不是)
那么这里到底可能是什么问题,主要是我想知道在排除故障时要寻找什么。我不知道我不知道什么。
谢谢
史蒂夫
我还不到 50 岁,所以我无法评论:
我查看了 CFBridgingRetain 的定义,它需要 ID,并返回 CFTypeRef
NS_INLINE CF_RETURNS_RETAINED CFTypeRef CFBridgingRetain(id X) {
return (__bridge_retained CFTypeRef)X;
}
现在 CFTypeRef 的定义是 void /* 所有“CF 对象”的基础“类型”,以及它们上面的多态函数 */ typedef const void * CFTypeRef;
所以为了放弃我这样做的警告,将函数的输出转换为 (void *)
AudioSessionAddPropertyListener ( kAudioSessionProperty_AudioRouteChange,
audioRouteChangeListenerCallback, (void *) CFBridgingRetain(self) );
有没有人看到这个问题?