Как получить доступ к N числу параметров в C Function и передать то же N в следующий? - PullRequest
0 голосов
/ 25 ноября 2011

Скажем, например, это мой метод C (& Objective-C) следующим образом.

void ALERT(NSString *title, NSString *message,NSString *canceBtnTitle,id delegate,NSString *otherButtonTitles, ... )
{
    // HERE I CAN ACCESS ALL THOSE ARGUMENTS
    // BUT I AM NOT SURE How to access additional arguments, supplied using ... ?

UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:title 
                                                  message:message 
                                                 delegate:delegate 
                                        cancelButtonTitle:canceBtnTitle 
                                        otherButtonTitles:// how to pass those params here?];
}

Как вы можете заметить, я также должен передать эти параметры в UIAlertView '* init метод.Я не уверен, как отправить эти параметры в otherButtonTitles.Я могу вызвать этот метод следующими способами.

ALERT(@"My Alert Title",@"Alert Subtitle",@"YES",viewCtr,@"No",@"May Be",@"Cancel",nil);

ALERT(@"Alert Title",@"Alert Subtitle",@"OK",viewCtr,@"Cancel",nil);

ALERT(@"Alert Title",@"Alert Subtitle",@"OK",viewCtr,nil);

ALERT(@"Alert Title",@"Alert Subtitle",@"OK",viewCtr,@"Option1",@"Option2",nil);

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

Звучит так, как будто вам нужно узнать va_arg (и va_list, va_start, va_end).

Вот учебник по теме .

Также прекрасная техническая заметка Apple под названием «Как мне написать метод, который принимает переменное число аргументов, например, NSString's + stringWithFormat:?»

Отредактировано, чтобы добавить:

Похоже на васхочу сделать va_copy.

Ааа, вот связанный вопрос .

0 голосов
/ 25 ноября 2011

Хммм!Я прошел через Wiki-ссылку

Я также кое-что узнал от Michael 'Ответа в этом посте .

Я нашел следующее решение.

void ALERT(NSString *title, NSString *message,NSString *canceBtnTitle,id delegate,NSString *otherButtonTitles, ... )
{
    UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:title 
                                                      message:message 
                                                     delegate:delegate 
                                            cancelButtonTitle:canceBtnTitle 
                                            otherButtonTitles:nil
                            ];

    va_list args;
    va_start(args, otherButtonTitles);
    NSString *obj;
    for (obj = otherButtonTitles; obj != nil; obj = va_arg(args, NSString*))
        [alertView addButtonWithTitle:obj];
    va_end(args);

    [alertView show];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...