在将其存储在数组中时更改路径的名称

时间:2014-01-14 00:12:51

标签: ios objective-c arrays path

我正在尝试在数组中保存音频数量,然后根据数组索引的数量播放其中任何一个。我有一个问题: 我是否需要更改每个新元素的路径? 例如:

NSURL *audioFileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:@"audioRecording.m4a"]];

然后每次,我记录并存储在此路径中并将路径保存为数组的元素。 这是否意味着我的数组中的所有元素都是相同的?这意味着即使我改变了数组的索引,我也会听到相同的音频?

以下是更好解释的代码:

- (IBAction)AudioRecord:(id)sender {
[self.AudioRecorder record];
[self.timer invalidate];
[self.AudioProgress setHidden:YES];


NSURL *audioFileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:@"audioRecording.m4a"]];
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:nil];

NSUserDefaults *audioDefaults= [NSUserDefaults standardUserDefaults];
[audioDefaults setURL:audioFileURL forKey:@"saveAudio"];
[audioDefaults synchronize];

NSUserDefaults *defaultsAudio=[NSUserDefaults standardUserDefaults];
NSUserDefaults *defaultsForArrayA =[NSUserDefaults standardUserDefaults];
NSMutableArray *AudioArray =[[defaultsForArrayA arrayForKey:@"myAudio"] mutableCopy];
if (!AudioArray) {
    AudioArray =[[NSMutableArray alloc]init];
}

NSString *Audiopath=[audioFileURL path];
[AudioArray addObject:Audiopath];
defaultsAudio=defaultsForArrayA;
[defaultsAudio setObject:AudioArray forKey:@"myAudio"];
[defaultsAudio synchronize]; }

在这里我尝试读取数组的元素:

- (IBAction)PlayAudio:(id)sender {
NSUserDefaults *audioDefaults= [NSUserDefaults standardUserDefaults];
audioArray2 =[[audioDefaults arrayForKey:@"myAudio"] mutableCopy];
audioPath=[audioArray2 objectAtIndex:index];
loadAudio= [NSURL URLWithString:[audioPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

AVAudioPlayer *AvAudioPlayer= [[AVAudioPlayer alloc] initWithContentsOfURL:loadAudio error: nil];
[self setAudioPlayer:AvAudioPlayer ];

[self.AudioPlayer play];
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.25
                                              target:self
                                            selector:@selector(updateProgress)
                                            userInfo:nil
                                             repeats:YES];
[self.AudioProgress setHidden:NO]; }

根据此代码,所有路径都相同,我在所有元素中听到相同的音频。无论我是读取index0还是1,它都是相同的元素!那不是我想做的事情:(

任何帮助?

1 个答案:

答案 0 :(得分:0)

如果您在保存时未更改名称,则每次都只覆盖同一文件。所以,是的,阵列中的所有曲目都将发挥相同的作用。

考虑创建自定义文件夹以保存音频,并使用时间戳或UUID作为文件的名称。