轻敲单元格时播放声音

时间:2013-12-01 07:27:36

标签: ios uitableview avaudioplayer

我正在开发一个项目,当按下tableview中的单元格时,会播放声音。我已将声音放入数组中,如下所示:

- (void)viewDidLoad
{
 [super viewDidLoad];
//Data
soundArray = [NSArray arrayWithObjects:
              [Sounds soundOfCategory:@"Sound" name:@"clipOne"],
              [Sounds soundOfCategory:@"Sound" name:@"clipTwo"],
              [Sounds soundOfCategory:@"Sound" name:@"clipThree"],
              nil];
//Reload the table
[[self tableView] reloadData];
}

我正在使用以下内容播放声音:

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:    (NSIndexPath *)indexPath{

static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}

//Create new Sound Object
Sounds *sound = nil;
sound = [soundArray objectAtIndex:indexPath.row];

//Configure the cell
[[cell textLabel]setText:[sound name]];
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];

return cell;
}

-(void)PlayClip:(NSString *)soundName
{
NSString *path = [[NSBundle mainBundle] pathForResource:soundName ofType:@"mp3"];
AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL     fileURLWithPath:path] error:NULL];

[theAudio play];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath     *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[self PlayClip:[soundArray objectAtIndex:indexPath.row]];
}

但没有运气。我收到错误: * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [声音长度]:无法识别的选择器发送到实例0xa35d720'

问题是什么?有没有更好的方式播放声音?我刚开始使用tableviews,所以请原谅我的无知。

谢谢!

1 个答案:

答案 0 :(得分:0)

您的代码的最后一行出现问题:

[self PlayClip:[soundArray objectAtIndex:indexPath.row]]; // PlayClip:(NSString *)

[soundArray objectAtIndex:indexPath.row]返回Sounds而不是NSStrintg

我认为应该是:

[self PlayClip:[[soundArray objectAtIndex:indexPath.row] name]];