2012-05-28 2 views
4

Я имею проблему, проходящую переменное число параметров функции:функция VARIADIC в OBJ-C пропускает первый аргумент

-(void)addCharacterToScene:(NSString *)name withFrames:(CCSpriteFrame*)frames,... { 
    va_list args; 
    va_start(args, frames); 
    id arg = va_arg(args,CCSpriteFrame*); 
    int i=1; 
    while (arg) { 
     NSString *frame_name = [NSString stringWithFormat:@"%@_%i",name,i]; 
     NSLog(@"%@ \n%@",frame_name, arg); 
     [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFrame:arg name:frame_name]; 
     arg = va_arg(args,CCSpriteFrame*); 
     i++; 
    } 
    va_end(args); 
} 

Проблема заключается в том, что функция пропускает первый аргумент. Мой вызов функции выглядит следующим образом:

[self addCharacterToScene:@"wiz" withFrames:wizardFrame1,wizardFrame2,wizardFrame3,nil]; 

я могу передать фиктивный объект в первом положении, и это дает желаемый результат, но должен быть лучшим решением. Благодаря!

ответ

6

Вместо того, чтобы делать это в первый раз:

id arg = va_arg(args,CCSpriteFrame*); 

Do:

id arg = frames; 

A va_list начинается после того, как аргумент, который вы укажете в функции va_start. Поэтому, если вы хотите обработать этот аргумент, вы должны начать с него самостоятельно.

+0

Имеет смысл. Спасибо! – TCool

Смежные вопросы