首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObjectAL :在fadeTo:duration:target:选择器上崩溃:

ObjectAL :在fadeTo:duration:target:选择器上崩溃:
EN

Stack Overflow用户
提问于 2012-06-01 16:48:59
回答 1查看 176关注 0票数 0

由于某种原因,我不确定为什么,我的应用程序总是在OALAudioTrack对象的fadeTo方法上崩溃。

我有三个不同的OALAudioTrack对象,它们都在一个数组中,如果给定值不同,我只需要更改一个OALAudioTrack对象。当值不同时,我需要淡出一个OALAudioTrack对象,然后淡入新的OALAudioTrack对象,并替换数组中的OALAudioTrack对象,但我不能这样做,因为它在第一次淡出(到0.0f)时总是崩溃。当应用程序崩溃时,它总是崩溃在同一行上,这是在OALActionManager.m第159行(Thread= NSUInteger indexOfObject:action.target;),错误是“Thread1 EXE_BAD_ACCESS”。在做淡入淡出之前有什么我必须做的吗,任何帮助都会非常感谢,因为我已经看了一天多了,我似乎无法克服这个错误。我使用的代码如下:

代码语言:javascript
复制
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:)];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-09 18:47:49

崩溃的部分是"action.target“。"target“是一个弱引用,所以如果你的跟踪在动作结束前释放,它将崩溃。

我怀疑,在某个时刻,您的代码正在使用其他方法从self.soundScapes中删除轨迹,或者正在对onFadeComplete进行另一个调用,在轨迹淡入淡出完成之前生成相同的索引(从而驱逐当前淡入淡出的轨迹)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10847167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档