-(void)didTapAudioButton:(UIButton*)sender {
[tableView reloadData];
UIButton* senderButton = (UIButton*)sender;
NSUInteger index = sender.tag;
NSString *audioFilePath = @"someAudioFilePath.mp3";// I didn't add the original audiofile path for security reasons
NSData *_objectData = [NSData dataWithContentsOfURL:[NSURL URLWithString:audioFilePath]];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithData:_objectData error:&error];
audioPlayer.delegate = self;
audioPlayer.numberOfLoops = 0;
if (audioPlayer == nil)
{
NSLog([error description]);
}
else
{
[audioPlayer play];
}
}
이 함수를 사용하면 URL 문자열 경로에서 버튼 클릭시 오디오 파일을 재생할 수 있습니다. 오디오가 잘 재생되고 있지만 문제는 [tableView reloadData] 함수가이 함수의 끝에서 호출된다는 것입니다. tableView가 주먹을 다시로드 한 다음 다음 줄로 이동하려합니다. 즉, UIButton * senderButton = (UIButton *) sender; 아무도 내게 오디오를 재생하기 전에 tableview를 다시로드하는 방법을 말해 줄 수 있습니까? 모든 종류의 도움을 주시면 감사하겠습니다. 감사. 메소드가 완료 될 때까지다른 함수보다 먼저 UITableView reload 함수를 호출하십시오.
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
[self.tableView layoutIfNeeded];
그것은 대기 :
메인 스레드에서이 방법을 사용할 수 있습니까? –
죄송합니다. 질문을 이해할 수 없습니다. 이 함수는 뷰 내의 버튼을 클릭 할 때 호출됩니다. 함수의 첫 번째 줄을보십시오. tableview reloadData를 호출하여 tableView를 다시로드합니다. 버튼을 클릭 할 때마다 오디오 파일을 재생하기 전에이 작업을 수행하려고합니다. 하지만 버튼을 클릭하면 먼저 전체 함수를 살펴본 다음 끝에 tableView reloadData를 호출합니다. 당신이 내 질문을 이해하기를 바랍니다. D. – Naqi