ObjectAL:崩溃的fadeTo:时间:目标:选择:

问题描述:

出于某种原因,我不知道为什么,我的应用程序一直在OALAudioTrack对象上fadeTo方法崩溃。ObjectAL:崩溃的fadeTo:时间:目标:选择:

我有其是在阵列内三个不同OALAudioTrack目的和我只需要改变一个OALAudioTrack对象,如果一个给定值是不同的。当该值是不同的,我需要褪色OALAudioTrack对象出来,然后淡入新OALAudioTrack对象和替换数组中的OALAudioTrack对象,但我不能这样做,因为它一直这样做第一淡出(为0.0f时崩溃)。当应用程序发生崩溃它总是崩溃在同一行上,这是OALActionManager.m线#159内(NSUInteger指数= [目标indexOfObject:action.target])和误差说“线程1 EXE_BAD_ACCESS”。是不是有什么做的逝去之前我必须做的,任何帮助将不胜感激,因为我一直在看它在一天,我似乎无法让过去这个错误。我使用的代码如下:

if ([[self.soundScapes objectAtIndex:i] isKindOfClass:[OALAudioTrack class]]) 
{ 
    [self.tmpSoundScapes removeAllObjects]; 
    [self.tmpSoundScapes addObject:[fnArr objectAtIndex:i]]; 
    [self.tmpSoundScapes addObject:[NSNumber numberWithInt:i]]; 

    OALAudioTrack *currentTrack = [self.soundScapes objectAtIndex:i]; 

    if ([currentTrack playing]) 
    { 
     NSLog(@"is playing"); 
     [currentTrack stopFade]; 

     //This is where the app crashes 
     [currentTrack fadeTo:0.0 duration:1.5 target:self selector:@selector(onFadeComplete:)]; 
    } 
} 




-(void)onFadeComplete:(id)sender 
{ 
    NSLog(@"fade complete"); 

    NSString *fn = [self.tmpSoundScapes objectAtIndex:0]; 
    int i = [[self.tmpSoundScapes objectAtIndex:1] intValue]; 

    OALAudioTrack *currentTrack = [self.soundScapes objectAtIndex:i]; 
    [currentTrack stop]; 
    currentTrack = nil; 

    OALAudioTrack* track = [OALAudioTrack track]; 
    [track preloadFile:fn]; 
    track.autoPreload = YES; 
    track.numberOfLoops = -1; // Loop forever when playing.    
    track.gain = 0.0f; // volume 
    [track play]; 

    [self.soundScapes replaceObjectAtIndex:i withObject:track]; 
    [self.soundScapesFiles replaceObjectAtIndex:i withObject:fn]; 

    int timer; 
    if (i==1) 
     timer = 10.0f; 
    else if (i==2) 
     timer = 25.0f; 
    else 
     timer = 0.5f; 

// [self performSelector:@selector(onPlayScoundScape:) withObject:[NSNumber numberWithInt:i] afterDelay:timer]; 
    [track fadeTo:1.0f duration:timer target:self selector:@selector(onPlayScoundScape:)]; 
} 

这都崩溃是“action.target”的一部分。 “目标”是一个弱引用,所以如果动作完成之前你跟踪解除分配,它会崩溃。

我怀疑在某些时候你的代码要么在其他方法中从self.soundScapes中删除轨道,要么在另一个onFadeComplete调用中生成相同的索引(从而逐出当前衰落的轨道)轨道淡入完成。