我正在尝试录制音频,并将每个录制的音频的路径保存在阵列中。我正在使用此代码来保存音频:
(IBAction)AudioRecord:(id)sender {
[self.AudioRecorder record];
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 =[[NSMutableArray alloc]init];
AudioArray =[defaultsForArrayA arrayForKey:@"myAudio"];
NSString *Audiopath=[audioFileURL path];
[AudioArray addObject:Audiopath];
defaultsAudio=defaultsForArrayA;
[defaultsAudio setObject:AudioArray forKey:@"myAudio"];
[defaultsAudio synchronize];
if (AudioArray.count==0)
_check.text=@"nothing";
else
_check.text=[NSString stringWithFormat:@"%lu", (unsigned long)AudioArray.count];
我正在使用if语句来检查对象是否保存在数组中。但事实证明没有任何东西得救!
当我删除此行时:
AudioArray =[defaultsForArrayA arrayForKey:@"myAudio"];
数组有效。但我需要这条线。
答案 0 :(得分:2)
更改这些行:
NSMutableArray *AudioArray =[[NSMutableArray alloc]init];
AudioArray =[defaultsForArrayA arrayForKey:@"myAudio"];
到
AudioArray =[[defaultsForArrayA arrayForKey:@"myAudio"] mutableCopy];
if (!AudioArray) {
AudioArray =[[NSMutableArray alloc]init];
}
目前,您正在尝试将对象添加到不可变的NSArray中。请注意,在这些行中:
NSMutableArray *AudioArray =[[NSMutableArray alloc]init];
AudioArray =[defaultsForArrayA arrayForKey:@"myAudio"];
您首先将空NSMutableArray分配给AudioArray
。然后在第二行中为它指定一个不同的值,并用NSArray覆盖第一个值。
答案 1 :(得分:-1)
问题是[defaultsAudio setObject:AudioArray forKey:@"myAudio"];
将AudioArray设置为nil。所以它会默默地忽略对它的任何调用,包括添加新项目。并且当没有时,AudioArray.count == 0。
没有此调用的原因是因为您正在NSMutableArray *AudioArray =[[NSMutableArray alloc]init];
上方初始化它,这将返回一个空的NSMutableArray
,您可以添加对象。
一个解决方案(如果你不能修改setObject:forKey :)是使用临时数组并将其合并到AudioArray中。
NSMutableArray *temp;
temp =[defaultsForArrayA arrayForKey:@"myAudio"];
AudioArray = [[NSMutableArray alloc] initWithArray:temp];
因此,如果返回nil,空白数组或填充数组,它将起作用。