Как мне вызвать значение массива и использовать его для воспроизведения звукового файла? - PullRequest
0 голосов
/ 31 июля 2009

У меня есть массив, который создает несколько разных имен звуковых файлов в определенном порядке. Я успешно создал массив, но я не уверен, как вызвать полученное из массива значение в виде URL-адреса файла или как внедрить его в AudioServicesPlaySystemSoundID.

Это код, который у меня есть:

       - (void)viewDidLoad {
            NSArray *sounds = [[NSArray alloc] initWithObjects: @"0.wav", @"1.wav", @"2.wav, nil];
            NSUInteger currentSound = 0;
            soundArray = sounds
            [super viewDidLoad];
        }

        - (void) playFailSound {
            currentSound++;
            if (currentSound >= [sounds count]) {
                currentSound = 0;
            }
            [self playSoundWithFilename:[sounds objectAtIndex:currentSound]];
        }

Я также не уверен, что мне нужно объявить в заголовочном файле, чтобы это работало, и как мне сохранить значение массива?

1 Ответ

0 голосов
/ 01 августа 2009

Вы спрашиваете, как вызвать playFailSound:? Или вы спрашиваете, как объявить массив звуков в заголовочном файле, чтобы сделать его переменной экземпляра?

Первая проблема, с которой вы столкнулись, заключается в том, что вы используете разные имена переменных для массива в двух методах. в viewDidLoad вы используете soundArray, а в playFailSound вы используете звуки.

В вашем заголовочном файле вам нужно объявить массив как переменную экземпляра:

#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

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

В вашем файле реализации вам понадобится следующее:

#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

Теперь все, что вам нужно сделать, это вызвать playFailSound откуда-то и заполнить часть, которая фактически воспроизводит звук.

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

Это довольно простой материал, поэтому, если вы не понимаете, что я здесь объясняю, я бы рекомендовал перечитать некоторые вводные материалы Apple.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...