C関数のN個のパラメータにアクセスし、同じNを次の関数に渡す方法は?

Say for example this is my C ( &objective-c) method as follows.

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);
0
追加された 著者 Xophmeister,

2 答え

あなたはva_arg(とva_list、va_start、va_end)を知る必要があるように聞こえます。

Here's a tutorial on the subject.

Also, a fine Apple tech note entitled "How can I write a method that takes a variable number of arguments, like NSString's +stringWithFormat:?"

追加するように編集:

va_copy のように聞こえます。

ああ、関連する質問です。

2
追加された
そうですね、私はそれらにアクセスする方法を知っていますが、疑問の中で編集された次の機能にそのまま渡す方法はわかりません。
追加された 著者 Sagar R. Kothari,
私はva_copyに関する情報を元の答えに編集しました。
追加された 著者 Michael Dautermann,

Hmmm ! I have gone through Wiki link

また、この記事のMichael Answer から何かを学びました。

私は次の解決策を思いつきました。

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];
}
0
追加された