问题描述
|
我正在尝试使用
AudioServicesAddSystemSoundCompletion
方法确定声音何时结束播放。第4个参数需要一个C函数,下面已实现。我收到错误消息,
引用时为Use of undeclared identifier \'completionCallback\' (first use in this function)
。我见过的在线示例都没有使用过[self completionCallback]
,也没有问题。
我要去哪里错了?
-(void)playAndRelease{
AudioServicesAddSystemSoundCompletion (_soundID,NULL,completionCallback,(void*) self);
AudioServicesPlaySystemSound(_soundID);
}
void completionCallback (SystemSoundID mySSID,void* myself) {
//NSLog(@\"completion Callback\");
AudioServicesRemoveSystemSoundCompletion (mySSID);
[(SoundEffect*)myself release];
}
解决方法
嗯,是。有时,错误消息的含义与所说明的完全相同。需要在“ 5”以上定义“ 4”。
第一种选择:声明但不执行
completionCallback
。
void completionCallback (SystemSoundID mySSID,void* myself);
-(void)playAndRelease{
AudioServicesAddSystemSoundCompletion (_soundID,NULL,completionCallback,(void*) self);
AudioServicesPlaySystemSound(_soundID);
}
void completionCallback (SystemSoundID mySSID,void* myself) {
//NSLog(@\"completion Callback\");
AudioServicesRemoveSystemSoundCompletion (mySSID);
[(SoundEffect*)myself release];
}
或完全提前定义它:
static void completionCallback (SystemSoundID mySSID,void* myself) {
//NSLog(@\"completion Callback\");
AudioServicesRemoveSystemSoundCompletion (mySSID);
[(SoundEffect*)myself release];
}
-(void)playAndRelease{
AudioServicesAddSystemSoundCompletion (_soundID,(void*) self);
AudioServicesPlaySystemSound(_soundID);
}
也可以看看:
维基百科:函数原型