2012-05-15 1 views
0

Я пытаюсь воспроизвести 4 аудиофайла случайным образом, когда они вызывают. здесь кодЗавершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '*** - [NSURL initFileURLWithPath:]: nil string parameter'

// randomize the playback on the setShot files 
    int randomNumber = arc4random() % 4 + 1; 
    NSString *tmpFileName = [[NSString alloc] initWithFormat:@"SetShot%d", randomNumber]; 
    NSString *fileName = [[NSBundle mainBundle] pathForResource:tmpFileName ofType:@"aif"]; 
    SystemSoundID soundID; 
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:fileName], &soundID); 
    AudioServicesPlaySystemSound (soundID); 

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

Звуковые файлы SetShot01 через к SetShot04

ARC-ARMv6, ARMv7 Xcode 4.3.2 на устройство с 5.1.1

+0

Try лесозаготовительной FileName, кажется, что это приходит ноль. – rishi

+0

Вы используете abf и злоупотребляете функциями стиля printf. Если вы это сделаете, по крайней мере, знаете, как они работают: http://www.kernel.org/doc/man-pages/online/pages/man3/sprintf.3.html –

ответ

2

Ваш файл tmpFileName вероятно, не существует в главном расслоении. Это приведет к созданию нулевого URL-адреса. Это потому, что вы сказали, что ваши имена файлов - SetShot0 [1-4], тогда как строки, которые вы создаете, - SetShot [1-4]. Изменение

NSString *tmpFileName = [[NSString alloc] initWithFormat:@"SetShot%d", randomNumber]; 

читать, как

NSString *tmpFileName = [[NSString alloc] initWithFormat:@"SetShot0%d", randomNumber]; 
+1

+1, вот в чем проблема. Опять вопрос RTFM (printf()). –

+0

Да, спасибо, что исправил это. «Его всегда в деталях» – Tom

+0

@Tom yep. Пожалуйста, отметьте мой ответ как решаемый, используя большую кнопку галочки рядом с моим вопросом. –