2010-11-08 11 views
0

J'essaie de jouer de manière dynamique peu de sons mp3 en utilisant AVAudioPlayer.Chargement dynamique de fichiers mp3 dans AVAudioPlayer - Argument de passage par valeur

Le code suivant fonctionne très bien et joue bien le son, pourtant je reçois cette erreur lors de l'analyse

« argument passe par valeur dans l'expression de message est indéfini »

Pourquoi, et comment devrait-on le réparer?

+(void)playSound:(int)soundName 
{ 
    NSString *theSound; 
    switch (soundName) { 
     case 1: 
      theSound = @"beep1.mp3"; 
      break; 
     case 2: 
      theSound = @"beep2.mp3"; 
      break; 
     case 3: 
      theSound = @"beep3.mp3"; 
      break; 
     default: 
      break; 
    } 
    // 
    NSURL *s1 = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], theSound]]; 
    NSError *error; 
    AVAudioPlayer *sound1; 
    sound1 = [[[AVAudioPlayer alloc] initWithContentsOfURL:s1 error:&error] autorelease]; 
    sound1.numberOfLoops = 0; 
    //[sound1 prepareToPlay]; 
    [sound1 play]; 

} 

Répondre

1

Voulez-vous vraiment essayer de lire un fichier son sans chemin si soundName n'est pas 1,2 ou 3?

Pour votre clause par défaut, signalez une erreur ou revenez silencieusement. Ne créez pas un joueur avec un chemin invalide et demandez-lui de le jouer, il ne fera que se fâcher.

+0

Merci Pete, je suppose que c'est l'autre côté du problème/solution – chewy

0

Essayez NSString *theSound = @"";

Définition d'une valeur par défaut résout généralement ce problème.

Explication:

Le compilateur est pas sûr que theSound contiendra effectivement une valeur lorsqu'il est utilisé. Il est recommandé d'affecter des valeurs par défaut à certains objets, notamment lorsque vous traitez des boucles et des instructions de sélection.

+0

Hey Evan, ça a fonctionné - merci beaucoup. Je vous serais reconnaissant si vous pouviez expliquer en quelques mots pourquoi est-ce le cas, je comprends plutôt mes erreurs que de simplement les corriger. – chewy

+0

Le compilateur n'est pas sûr que 'theSound' contienne réellement une valeur lorsqu'il est utilisé. Il est recommandé d'affecter des valeurs par défaut à certains objets, notamment lorsque vous traitez des boucles et des instructions de sélection. –

+0

merci Evan, très apprécié. – chewy