2009-07-30 7 views
0

Pourquoi ce code ne fonctionne-t-il pas? L'application se charge bien, mais chaque fois que j'appuie sur le bouton l'application se bloque (ne plante pas) et me renvoie à Xcode et il y a une flèche rouge pointant vers l'une des lignes (indiqué sur la ligne ci-dessous). Je reçois également trois avertissements (pas d'erreurs), l'un dit 'NSMutableArray' peut ne pas répondre à '-objectAt:' et le second dit la variable inutilisée 'soundToPlay' Le troisième dit la déclaration implicite de la fonction 'AudioServicesPlaySystemSound' Je suis préoccupé par ceux-là?Quel est le problème avec ce tableau? Chaque fois que je lance l'action, il se bloque

//In MainViewController.h 

    @interface MainViewController : UIViewController { 
     IBOutlet UIButton *Button;  
    } 

    @property (nonatomic, retain) UIButton *Button; 

    - (IBAction)playSound; 

    NSInteger currentSound; 
    NSMutableArray *soundArray; 

    @end 




    //In MainViewController.m 

     - (void)viewDidLoad { 
     currentSound = 0; 
     NSMutableArray *sounds = [[NSMutableArray alloc] init]; 
     [sounds addObject: @"0.wav"]; 
     [sounds addObject: @"1.wav"]; 
     [sounds addObject: @"2.wav"]; 
     [sounds addObject: @"3.wav"]; 
     [sounds addObject: @"4.wav"]; 
     [sounds addObject: @"5.wav"]; 
     [sounds addObject: @"6.wav"]; 
     [sounds addObject: @"7.wav"]; 
     [sounds addObject: @"8.wav"]; 
     [sounds addObject: @"9.wav"]; 
     [sounds addObject: @"10.wav"]; 
     [sounds addObject: @"11.wav"]; 
     [sounds addObject: @"12.wav"]; 
     [sounds addObject: @"13.wav"]; 
     [super viewDidLoad]; 
    } 

    - (IBAction)playSound { 
     NSString *soundToPlay = [soundArray objectAt: currentSound]; 
//First two errors here. 
     currentSound = (currentSound + 1) % [soundArray count]; //Red arrow points to this line. 
     AudioServicesPlaySystemSound (currentSound); 
//Third error here. 
    } 

Répondre

2

premier: MethodName doesn n'existe pas. Vous vouliez écrire ot objectAtIndex au lieu de objectAt. Quand il est dit que l'objet pourrait maintenant répondre à l''-quelque chose', c'est parce que les méthodes ne sont pas déclarées dans le fichier d'en-tête. Il en résulte que le compilateur ne sait pas si la méthode existe ou non dans le fichier d'implémentation. Lorsque vous utilisez des classes intégrées (NSArray, NSView, etc.), ce type d'avertissement signifie généralement que vous avez mal orthographié un nom de méthode. La seule chose à faire est de chercher dans la documentation et doubleecheck. Ce genre d'erreur de type causera un crash dans l'application lorsque vous essayez d'envoyer un message à un objet qui ne répond pas au sélecteur.

Deuxième: Ceci est juste un avertissement vous indiquant qu'une variable n'est pas utilisée. Enlevez la ligne. Comme vous pouvez le voir soundToPlay n'est pas utilisé dans la méthode playSound, il est seulement déclaré. Si vous l'utilisez fx. avec un appel de fonction NSLog ou dans une méthode, cet avertissement devrait disparaître.

Troisième: Vous utilisez peut-être la fonction incorrecte. Impossible de dire à partir du code que vous avez publié ..

Autre: Daniel a raison. Votre méthode viewDidLoad crée un tableau local et ne le stocke jamais dans la variable d'instance soundArray. Pour ce faire, ajoutez un

soundArray = sounds 

dans le bas de la méthode. Ou écrivez directement à soundsArray au lieu de sons.

+0

Merci qui a aidé à se débarrasser de toutes les erreurs, sauf cette erreur variable inutilisée. Essentiellement ce que je voudrais faire utiliser les noms générés dans le tableau comme le nom du fichier audio et ensuite le jouer, j'ai essayé quelques méthodes telles que la fonction AudioServicesPlaySystemSound mais pas de chance. J'ai vérifié la documentation d'Apple pour cela et j'ai fait quelques recherches sur Google, mais je n'ai pas réussi à trouver une réponse solide et fonctionnelle. – JoeyParis

+0

Le fait est que AudioServicesPlaySystemSound prend un SystemSoundID et pas un NSString. C'est de la documentation: Le son du système à jouer. Avant d'utiliser cette fonction, appelez la fonction AudioServicesCreateSystemSoundID pour obtenir un son système. Avez-vous lu cette notice? Je n'ai pas beaucoup d'expérience avec cette partie des frameworks. Mais vous stockez NSStrings dans le tableau et vous ne pouvez pas analyser le contenu directement dans la fonction. C'est pourquoi vous obtenez une erreur maintenant ... –

+0

essayez de regarder dans cet exemple de code: https://developer.apple.com/iphone/prerelease/library/samplecode/SysSound/index.html –

1

À partir du code vu, ne marche pas semble-vous déjà intialize soundArray, vous peuplez une variable locale dans viewDidLoad appelé les sons, et la mise en soundArray jamais ...

+0

Il ressemble à du code Matlab dans le fichier .m. Dans matlab, vous n'avez pas besoin d'initialiser les variables. –

+0

quoi? soundArray n'a rien dedans, en passant par le code ci-dessus c'est – Daniel

+0

@yelinna: l'OP dit dans les balises que c'est objc sur l'iphone. – Tim

Questions connexes