NSMutableArray不存储元素

时间:2014-01-13 20:42:15

标签: ios iphone objective-c

我正在尝试录制音频,并将每个录制的音频的路径保存在阵列中。我正在使用此代码来保存音频:

 (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"];

数组有效。但我需要这条线。

2 个答案:

答案 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,空白数组或填充数组,它将起作用。