NSMutableArray не создан как ожидалось - PullRequest
0 голосов
/ 01 мая 2018

Я занимаюсь разработкой класса в Objective C, который содержит два массива audioFiles и files . Массив Files содержит все имена аудиофайлов, а audioFiles представляет собой массив для хранения AVAudioFile, сгенерированного из элементов в массиве файлов.

Я хочу создать экземпляр обоих массивов при создании экземпляра класса.

AudioPlayer * player = [[AudioPlayer alloc] init];

Но я не могу создать экземпляр массива audioFiles, поскольку он ничего не показывает (ноль). Я поместил оба массива в реализацию, потому что я не хочу показывать эти два массива за пределами моего класса.

Не могли бы вы помочь мне решить проблему?

#import <AVFoundation/AVFoundation.h>
#import "AudioPlayer.h"

@implementation AudioPlayer
{  
    NSMutableArray *audioFiles;    
    NSArray *files;    
}

- (instancetype)init
{
    self = [super init];
    if (self) {
        files = [NSArray arrayWithObjects:@"one", @"two", @"three",@"four", nil];

        [self createAudioFiles];
    }
    return self;
}

-(void) createAudioFiles{
    for (int i = 0; i < [files count]; i++) {
        NSString *audioPath = [[NSBundle mainBundle] files[i] ofType:@"wav"];
        NSURL *url = [NSURL fileURLWithPath:audioPath];
        AVAudioFile *file = [[AVAudioFile alloc] initForReading:url error:nil];
        [audioFiles addObject:file];
    }
}
@end

1 Ответ

0 голосов
/ 01 мая 2018

Вы вообще не инициализируете audioFiles, вам нужно добавить:

audioFiles = [NSMutableArray array];

в init или в начале createAudioFiles метода.

Если вы не планируете добавлять больше объектов после инициализации, нет необходимости сохранять изменяемый массив, просто объявите его как NSArray *audioFiles; и измените свой метод на:

-(void) createAudioFiles{
    NSMutableArray *buffer = [NSMutableArray array];

    for (int i = 0; i < [files count]; i++) {
        NSString *audioPath = [[NSBundle mainBundle] files[i] ofType:@"wav"];
        NSURL *url = [NSURL fileURLWithPath:audioPath];
        AVAudioFile *file = [[AVAudioFile alloc] initForReading:url error:nil];
        [buffer addObject:file];
    }

    audioFiles = [buffer copy]; // make it immutable
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...