2012-04-27 2 views
0

Я новичок в этом, так и в попытке сохранить вещи простыми, я пытаюсь добавить звук в мой main.mфайла не найдена ошибка в попытке воспроизведения звука (Obj-C)

As насколько я знаю, следующий код должен работать, но когда я его запускаю, я получаю «Error Domain = NSOSStatusErrorDomain Code = -43». Операция не может быть выполнена. (OSStatus error -43.) "(Файл не найден)"

Я пробовал его с различными аудиофайлами и форматами - добавлен в проект в Xcode, но не могу понять, почему он не находит мой G1 .wav

AVAudioPlayer *audioPlayer; 

     NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"/G1.wav"]]; 

     NSError *error; 
     audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
     audioPlayer.numberOfLoops = -1; 

     if (audioPlayer == nil) 
      NSLog([error description]); 
     else 
      [audioPlayer play]; 

EDIT удалены NSBundle и mainBundle ссылки - мое недопонимание

+0

Когда вы смотрите на свой комплект приложений, действительно ли файл находится в Whatever.app/Contents/Resources/G1.wav? Если это не так, вы получаете ошибку «Файл не найден», и решение заключается в том, чтобы выяснить, что вы делаете неправильно в Xcode, чтобы получить файл в неправильном месте. Если да, то есть другая проблема. Нам будет намного легче диагностировать, знаем ли мы, что это такое. – abarnert

+0

Итак, теперь я уверен, что я запутался и добавил строки NSBundle, когда он не работал. Теперь я заменил строку на «NSURL» url = [NSURL fileURLWithPath: [NSString stringWithFormat: @ "G1.wav"]]; и это не сработает. У меня нет пакета приложений. Все, что я сделал, это перетащить файл G1.wav в мой поддерживающий файл и предположить, что указанная выше строка будет правильной ... но, к сожалению, файл не найден –

+0

Исправлено, перейдя в проект на основе какао от командной строки. Это означало, что я могу на самом деле обратиться к этой группе. Спасибо за помощь –

ответ

2

вы могли бы быть лучше с этим:

NSString *path = [[NSBundle mainBundle] pathForResource:@"G1" ofType:@"wav"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
... 

Использование pathForResource:ofType: вы не должны беспокоиться о том, где находится в иерархии вашего пакета файл. Вызов API вызывает это. И в вашем коде, что возвращается resourcePath, явно не правильный путь.

Вы можете добавить несколько звонков здесь и там, чтобы узнать, что на самом деле происходит.

+0

Если вам не нужно иметь дело с OS X 10.5 или iOS 3, нет веской причины для вызова pathForResource: ofType: а затем fileURLWithPath: в результате вы можете просто вызвать URLforResource: withExtension: напрямую. Что еще более важно, это фактически не решает проблему пользователя, так как вы указываете тот же самый путь, что и его оригинальный код, по-другому. – abarnert

+0

@abamert: 'URLForResource: withExtension:' не было первым, когда я ответил. Это, безусловно, хорошая вещь для использования здесь. К вашему второму пункту я бы не согласился. OP создает путь путем конкатенации результата 'resourcePath' и имени файла. 'resourcePath' - это просто путь к каталогу, содержащий ресурсы, а не путь к ресурсу, который ему нужен. –

+0

Спасибо за помощь, ребята, я исправил ее, перейдя в приложение на основе какао, чтобы я мог ссылаться на пакет. Я думаю, что для командной строки требуется более точное указание на файл. –

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