我正在开发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
答案 0 :(得分:1)
您根本没有初始化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
}