Cocoa touch 使用未声明的标识符';完成回调';

Cocoa touch 使用未声明的标识符';完成回调';,cocoa-touch,Cocoa Touch,我试图通过使用AudioServicesAndSystemSoundCompletion方法识别声音何时播放完毕。第四个参数需要一个C函数,我在下面实现了这个函数。我收到了错误信息 引用未声明的标识符“completionCallback”(此函数中的第一次使用)。我所看到的在线示例中没有一个使用过[self completionCallback],它们也没有问题 我哪里做错了 -(void)playAndRelease{ AudioServicesAddSystemSoundCompl

我试图通过使用
AudioServicesAndSystemSoundCompletion
方法识别声音何时播放完毕。第四个参数需要一个C函数,我在下面实现了这个函数。我收到了错误信息

引用未声明的标识符“completionCallback”(此函数中的第一次使用)
。我所看到的在线示例中没有一个使用过
[self completionCallback]
,它们也没有问题

我哪里做错了

-(void)playAndRelease{
    AudioServicesAddSystemSoundCompletion (_soundID,NULL,NULL,completionCallback,(void*) self);
    AudioServicesPlaySystemSound(_soundID);
}

void completionCallback (SystemSoundID  mySSID, void* myself) {
    //NSLog(@"completion Callback");
    AudioServicesRemoveSystemSoundCompletion (mySSID);
    [(SoundEffect*)myself release];
}

嗯,是的。有时,错误消息的意思与它所说的完全一致<代码>完成回调需要在上面定义
播放和释放

第一个选项:声明但不实现,
completionCallback

void completionCallback (SystemSoundID  mySSID, void* myself);

-(void)playAndRelease{
    AudioServicesAddSystemSoundCompletion (_soundID,NULL,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,NULL,NULL,completionCallback,(void*) self);
    AudioServicesPlaySystemSound(_soundID);
}
另见:


  • 嗯,是的。有时,错误消息的意思与它所说的完全一致<代码>完成回调需要在上面定义
    播放和释放

    第一个选项:声明但不实现,
    completionCallback

    void completionCallback (SystemSoundID  mySSID, void* myself);
    
    -(void)playAndRelease{
        AudioServicesAddSystemSoundCompletion (_soundID,NULL,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,NULL,NULL,completionCallback,(void*) self);
        AudioServicesPlaySystemSound(_soundID);
    }
    
    另见:


    谢谢。启动obj-c。纯粹的无知很乐意帮忙。这是C原则,你也是C新手吗?如果是这样的话,我会努力找到一个链接来帮助你。不要介意最后的评论:我在维基百科的文章中添加了一个关于这个的链接。谢谢。启动obj-c。纯粹的无知很乐意帮忙。这是C原则,你也是C新手吗?如果是这样的话,我会努力找到一个链接来帮助你。不要介意最后的评论:我在维基百科的文章中添加了一个关于这个的链接。