Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «*** -[NSURL initFileURLWithPath:]: нулевой строковый параметр»

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

  // 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


person Tom    schedule 15.05.2012    source источник
comment
Попробуйте зарегистрировать имя файла, похоже, что это будет ноль.   -  person rishi    schedule 15.05.2012
comment
Вы злоупотребляете и неправильно используете функции в стиле printf. Если да, то хотя бы узнайте, как они работают: kernel.org/doc/man-pages/online/pages/man3/sprintf.3.html   -  person    schedule 15.05.2012


Ответы (1)


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

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

читать как

 NSString *tmpFileName = [[NSString alloc] initWithFormat:@"SetShot0%d", randomNumber];
person Jack Lawrence    schedule 15.05.2012
comment
@ Том, да. Пожалуйста, отметьте мой ответ как решенный, используя большую кнопку с галочкой рядом с моим вопросом. - person Jack Lawrence; 15.05.2012