2014-02-14 4 views
0

Я работаю над проектом, который позволяет воспроизводить звук при выборе ячейки в виде таблицы. Чтобы сделать вещи немного проще, я реализовал функцию поиска. Проблема в том, что она работает не так. когда вы нажимаете на результат, звук, который воспроизводится, исходит из исходного массива, а не только отфильтрованного. Я знаю, что моя ошибка лежит где-то здесь, и я бы немного помог найти ее.Результаты поиска Flitering

//Create new Sound Object 
Sounds *sound = nil; 
//check to see whether the normal table or search results table is being displayed and  set the Sound object from the appropriate array 
if (tableView == self.searchDisplayController.searchResultsTableView) { 

    sound = [filteredSoundArray objectAtIndex:indexPath.row]; 
}else{ 
    sound = [soundArray objectAtIndex:indexPath.row]; 
} 

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

return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

[tableView deselectRowAtIndexPath:indexPath animated:YES]; 
NSString *selectedSoundFile = [[soundArray objectAtIndex:indexPath.row]name]; 
NSString *path = [[NSBundle mainBundle]pathForResource:selectedSoundFile ofType:@"mp3"]; 


if(path){ 
    theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 

    [self.theAudio play]; 
} 

    if (tableView == self.searchDisplayController.searchResultsTableView) { 
    theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 

    [self.theAudio play]; 

} 

}

Спасибо!

ответ

1

изменить массив в didSelectRowAtIndexPath

NSString *selectedSoundFile = [[soundArray objectAtIndex:indexPath.row]name]; 

если вы palying из результатов поиска используйте filteredSoundArray вместо soundArray ..

условие, которое вы играете на выбор должен быть воспроизведен из массива, который вам используются для отображения в виде таблицы. Но вы используете массив, который имеет все звуки.

изменить следующим образом в didSelectRowIndexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

[tableView deselectRowAtIndexPath:indexPath animated:YES]; 

NSString *selectedSoundFile; 
if (tableView == self.searchDisplayController.searchResultsTableView) { 

selectedSoundFile = [[filteredSoundArray objectAtIndex:indexPath.row]name]; 
}else{ 
selectedSoundFile = [[soundArray objectAtIndex:indexPath.row]name]; 
} 
NSString *path = [[NSBundle mainBundle]pathForResource:selectedSoundFile ofType:@"mp3"]; 


if(path){ 
    theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 

[self.theAudio play]; 
} 
} 
+0

При изменении NSString * selectedSoundFile = [[soundArray objectAtIndex: indexPath.row] имя]; to NSString * selectedSoundFile = [[filterSoundArray objectAtIndex: indexPath.row] name]; Я получаю «NSRangeException» для пустого массива. – user1176046

+0

Отфильтрованные звуки работают отлично! Но я получаю «NSRangeException», когда пытаюсь воспроизвести звук, который я не ищу. – user1176046

+0

, пожалуйста, найдите мой отредактированный ответ выше – RAJA

Смежные вопросы