Demandez-vous comment appeler playFailSound:? Ou demandez-vous comment déclarer le tableau de sons dans votre fichier d'en-tête pour en faire une variable d'instance?
Le premier problème que vous avez est que vous utilisez un nom de variable différent pour le tableau dans les deux méthodes. Dans viewDidLoad vous utilisez soundArray, et dans playFailSound vous utilisez des sons.
Dans votre fichier d'en-tête, vous aurez besoin de déclarer un tableau comme une variable d'instance:
#import <UIKit/UIKit.h>
@interface MyObject : NSObject {
NSArray *_sounds; //declare the variables
NSInteger _currentSound; //this doesn't need to be unsigned, does it?
}
@property(nonatomic, retain) NSArray *sounds; //property
@property(value) NSInteger currentSound; //property
//method declarations
- (void) playFailSound;
- (void) playSoundWithFilename:(NSString *)fileName;
@end
Vous remarquerez que j'utilisé un trait de soulignement au nom de la variable, mais n'a pas la propriété. De cette façon, vous n'utiliserez pas accidentellement la variable lorsque vous voulez utiliser la propriété.
Dans votre fichier de mise en œuvre, vous aurez besoin des éléments suivants:
#import "MyObject.h"
@implementation MyObject
//synthesize the getters and setters, tell it what iVar to use
@synthesize sounds=_sounds, currentSound=_currentSound;
- (void)viewDidLoad {
NSArray *tempSounds = [[NSArray alloc] initWithObjects: @"0.wav",
@"1.wav",
@"2.wav, nil];
self.currentSound = 0; //use the setter
self.sounds = tempSounds; //use the setter
[tempSounds release]; //we don't need this anymore, get rid of the memory leak
[super viewDidLoad];
}
- (void) playFailSound {
self.currentSound=self.currentSound++; //use the getters and setters
if (self.currentSound >= [self.sounds count]) {
self.currentSound = 0;
}
[self playSoundWithFilename:[self.sounds objectAtIndex:self.currentSound]];
}
- (void) playSoundWithFilename:(NSString *)filename {
//you fill this in
}
@end
Maintenant, tout ce que vous devez faire est d'appeler playFailSound de quelque part, et remplir la partie qui joue en fait le son. Essentiellement, pour que deux méthodes se réfèrent à la même variable qui n'est pas passée entre elles, il doit s'agir d'une variable d'instance.
Ceci est assez basique, donc si vous n'obtenez pas ce que je suis en train d'expliquer ici, je vous suggère de relire certains des documents d'introduction d'Apple.
Ne pas oublier de traiter dealloc. –
Bien sûr, merci! –