Objective c 未触发委托事件内部的函数

Objective c 未触发委托事件内部的函数,objective-c,delegates,avaudioplayer,Objective C,Delegates,Avaudioplayer,我已将此委托添加到我的实现文件中,由于某些原因,我无法更改按钮的图像,但我可以在控制台中看到日志 - (void)audioRecorderDidFinishRecording:(AVAudioRecorder *) aRecorder successfully:(BOOL)flag{ [PlayButton setImage:[UIImage imageNamed:@"playbutton.png"] forState:0]; NSLog (@"audioRecorderDid

我已将此委托添加到我的实现文件中,由于某些原因,我无法更改按钮的图像,但我可以在控制台中看到日志

- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *) aRecorder successfully:(BOOL)flag{
    [PlayButton setImage:[UIImage imageNamed:@"playbutton.png"] forState:0];
    NSLog (@"audioRecorderDidFinishRecording:successfully:");
}
这很奇怪,因为我可以在其他任何地方更改按钮图像,并且在触发事件时可以在控制台中看到日志

:-S
下面是我如何分配代表的

avPlayer.delegate = self;
[avPlayer prepareToPlay];
[avPlayer play];
下面是我如何设置playbutton插座的

@interface OneStepRecordViewController : UIViewController<AVAudioPlayerDelegate>{
........
    IBOutlet UIButton *PlayButton;
    IBOutlet UIButton *StopButton;
.......
}
@接口OneStepRecordViewController:UIViewController{
........
IBUIButton*播放按钮;
IBUIButton*停止按钮;
.......
}

没有足够的声誉发表评论

请检查是否已设置正确的uicontrol状态

在您的代码中,您的PlayButton可能处于不同的状态,即不处于uicontrol状态正常

使用

检查状态

你可以把支票放在这里

- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *) aRecorder successfully:(BOOL)flag{
    NSLog(@"Play button state: %d", [PlayButton state]); // this line
    [PlayButton setImage:[UIImage imageNamed:@"playbutton.png"] forState:UIControlStateNormal];
    NSLog (@"audioRecorderDidFinishRecording:successfully:");
}
此外,为了更好地理解(编程实践),请使用

[PlayButton setImage:[UIImage imageNamed:@"playbutton.png"] forState:UIControlStateNormal];
而不是一个“0”的幻数


希望能有所帮助。

PlayButton是如何设置的,这个代理是如何分配的?@Chuck我刚刚用更多信息更新了我的帖子。你确认了PlayButton.png是否捆绑到你的应用程序中,并且可以在此代码之外成功加载吗?控制台中是否显示了日志AudioRecorderDifinishRecording:成功:记录?你能试着在主线程中调用方法setImage吗?@esker是的,因为这就是我设置它的方式,然后我切换到stopButton,然后在播放结束后确认播放。谢谢这有助于解决我的问题
[PlayButton setImage:[UIImage imageNamed:@"playbutton.png"] forState:UIControlStateNormal];