Категория Objective-C и новый iVar

Я пытаюсь расширить функциональность SimpleAudioEngine cocos2d с возможностью воспроизводить несколько звуковых эффектов один за другим, как некую цепочку. Я пытался сделать это с расширением. Однако теперь я понял, что мне, вероятно, также нужен iVar, чтобы запомнить имена всех звуковых файлов и один, чтобы запомнить, какой звук воспроизводится в данный момент.

Однако кажется, что я не могу добавить iVars в категорию. Вместо этого я попытался использовать расширение, но кажется, что оно должно быть в исходном файле .m класса, чтобы оно также не работало. Есть ли еще один способ, который позволяет мне сделать это?

Заголовок с категорией

<code>#import <Foundation/Foundation.h>
@interface SimpleAudioEngine(SoundChainHelper)<CDLongAudioSourceDelegate>
-(void)playSoundChainWithFileNames:(NSString*) filename, ...;
@end
</code>

И .m-файл с расширением:

<code>#import "SoundChainHelper.h"

@interface SimpleAudioEngine() {
    NSMutableArray* soundsInChain;
    int currentSound;
}
@end

@implementation SimpleAudioEngine(SoundChainHelper)

// read in all filenames and start off playing process
-(void)playSoundChainWithFileNames:(NSString*) filename, ... {
    soundsInChain = [[NSMutableArray alloc] initWithCapacity:5];

    va_list params;
    va_start(params,filename);

    while (filename) {
        [soundsInChain addObject:filename];
        filename = va_arg(params, NSString*);
    }
    va_end(params);
    currentSound = 0;
    [self cdAudioSourceDidFinishPlaying:nil];
}

// play first file, this will also always automatically be called as soon as the previous sound has finished playing
-(void)cdAudioSourceDidFinishPlaying:(CDLongAudioSource *)audioSource {
    if ([soundsInChain count] > currentSound) {
        CDLongAudioSource* mySound = [[CDAudioManager sharedManager] audioSourceForChannel:kASC_Right];
        [mySound load:[soundsInChain objectAtIndex:0]];
        mySound.delegate = self;
        [mySound play];
        currentSound++;
    }
}

@end
</code>

В качестве альтернативы я попытался определить iVars как свойства, которые будут компилироваться. Однако я не могу ни синтезировать их, ни у меня нет никакой другой возможности связать их с каким-либо методом.

Я пытаюсь реализовать эту функциональность как категорию SimpleAudioEngine, чтобы мне нужно было помнить только один класс, который занимается всеми моими проблемами со звуком. и чтобы я мог создать цепочку так же просто, как это:

<code>[[SimpleAudioEngine sharedEngine] playSoundChainWithFileNames:@"6a_loose1D.mp3", @"6a_loose2D.mp3", @"6a_loose3D.mp3", @"6a_loose4D.mp3", @"6b_won1D.mp3", nil];
</code>

Если есть другой способ, который дает такой же / похожий результат, я также был бы очень благодарен.

Ответы на вопрос(2)

Ваш ответ на вопрос