我的iPhone应用程序代码没什么问题,但无法识别。请帮忙。
bellow是我的代码给了我错误。
此代码已循环播放。
- (void)playSoundSequence{
if(songCounter >= totalSoundsInQueue || songCounter < 0){
songCounter = 0;
}
NSLog(@"%d", songCounter);
sound = [[NSString alloc] initWithFormat:@"%@", [theSoundArray objectAtIndex:songCounter]];
NSLog(@"call");
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:sound ofType:@""]] error:NULL];
sound = nil;
[sound release];
audioPlayer.delegate = self;
audioPlayer.volume = m_volSlider.value;
[audioPlayer play];
m_progressBar.progress = 0;
m_progressSlider.value = 0;
m_progressSlider.maximumValue = audioPlayer.duration;
[m_btnPlay setBackgroundImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal];
bgTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateDisplay) userInfo:nil repeats:YES];
songCounter++;
}
songCounter
是整数,并且根据循环逐个递增。
在此代码theSoundArray
中,我的数组包含类似于下面的
"song1.mp3",
"song2.mp3",
"song3.mp3",
"song4.mp3"
问题是每次第一次调用我的循环时,&#34; songCounter&#34;是0它运行正常。然后第二次进入循环和#34; songCounter&#34;是1然后有问题,并给我错误。
以下是错误。
-[__NSCFString objectAtIndex:]: unrecognized selector sent to instance
答案 0 :(得分:2)
我希望你没有保留数组,所以当你在一段时间后访问它时,它会崩溃。
因此,在初始化theSoundArray
时请执行以下操作。请参阅retain
NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *dirContents = [fm contentsOfDirectoryAtPath:bundleRoot error:nil];
NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.mp3'"];
theSoundArray = [[dirContents filteredArrayUsingPredicate:fltr] retain];
现在试试。
修改强>
以下陈述中的顺序不正确。
sound = nil;
[sound release];
您释放它然后将其设置为nil。
答案 1 :(得分:0)
您需要retain
theSoundArray
一段时间,然后再release
。它正在被取消分配,并且一根字符串正在其旧地址居住。
如果您使用的是ARC,则不适用。 :)