NSMutableArray未按预期实例化

时间:2018-05-01 15:38:08

标签: objective-c

我正在开发Objective C中的一个类,它包含两个数组 audioFiles 文件。 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 :(得分:1)

您根本没有初始化audioFiles,需要添加:

audioFiles = [NSMutableArray array];

initcreateAudioFiles方法的开头。

如果您不打算在初始化后添加更多对象,则无需保持数组可变,只需将其声明为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
}