2014-11-29 4 views
0

У меня есть mp3-файл в папке поддерживающих файлов, которую я хотел бы воспроизвести в своем приложении в цикле. Я использую следующий код, чтобы попытаться это:Как получить доступ к файлу с помощью pathForResource: ofType: inDirectory

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"smoothjazz" ofType:@"mp3" inDirectory:@"Supporting Files"]; 
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil]; 
player.numberOfLoops = -1; //infinite 
[player play]; 

Однако это возвращает ошибку, говоря:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter' 

Как я могу получить доступ к файл вспомогательных файлов, а также воспроизводить его по назначению? Вся помощь была оценена.

EDIT: SOLVED! Смотрите мой ответ за то, как я это сделал :)

ответ

1

Если Supporting Files папка является Поддержка файлов группы вы видите в каждом проекте Xcode по умолчанию, чем inFolder: аргумент не нужен, поскольку Supporting Files является Xcode группировка, а не реальный папка. Поэтому вы должны:

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"smoothjazz" 
                  ofType:@"mp3"]; 

Это должно сработать.

Надеюсь, это поможет.

+0

К сожалению, это не работает: \ Может ли быть, что громкость симулятора не включена? –

+0

Я решил это! Проблема заключалась в том, что я объявил AVAudioPlayer в методе viewDidLoad; но вы были правы, мне не нужно было использовать «inDirectory:» - Спасибо за вашу помощь :) –

0

Может быть путь, который вы получаете через это будет ноль,

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"smoothjazz" ofType:@"mp3" inDirectory:@"Supporting Files"];.

Убедитесь, что вы правильно добавили файлы в свой комплект. И добавьте правильные проверки перед совершением операций, это лучшая практика. Как следует, Надеюсь, что это помогает ..

// Define NSFileManager and add the proper checks for file existance like as follows. 
NSFileManager *filemgr = [NSFileManager defaultManager]; 
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"smoothjazz" ofType:@"mp3" inDirectory:@"Supporting Files"]; 

if (filemgr fileExistsAtPath:imageURL.absoluteString]) 
{ 
// Your code to play the sound file 
} 
+0

Я просто попробовал это (заменив imageUrl на soundFilePath) и поместил NSLog в оператор if. По-видимому, файл существует! Тем не менее, звук по-прежнему не воспроизводится ... Не может ли это быть настройкой симулятора? Я использовал '[player setVolume: 1.0];', но это не имеет никакого эффекта. –

0

Dan Spag был прав - мне не нужно было использовать 'inDirectory:', как это было в поддерживающих файлах. Но основная проблема заключалась в том, что я объявила AVAudioPlayer в методе viewDidLoad, что означает, что срок его службы был до тех пор, пока метод (или что-то в этом ряду). Поэтому я объявил переменную глобальной переменной, и проблема была решена! Музыка играет.

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