传递string formatter作为参数

时间:2012-07-28 11:22:14

标签: iphone objective-c

我有一个名为showMessage的函数,它显示警告消息对话框。此函数将string作为参数,并将此字符串显示为对话框的消息。在开始时,我想要传递字符串以及格式化器的方式,如下所示:

[self showMessageDialog:@"Hello %@", self.studentName];

你可以看到我想要实现的目标。所以我的功能签名是这样的:

- (void) showMessageDialog:(NSString *)message, ...{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" 
                                                message:message 
                                               delegate:nil 
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
[alert show];
[alert release];
}

有了这个,我可以在函数调用期间传递多个格式化程序(我的意思是将占用占位符),但我遗漏了一些不允许我在消息上显示格式化程序参数的东西。我的意思是我总是在消息对话框中显示此消息:“Hello%@” 你能帮帮我吗?我知道我已经错过了像我已经设法将多个参数传递给函数调用的方法,但我想我还没有把它们放在它们的占位符上。

注意:我想让函数像NSLog一样工作,我们调用NSLog并传递参数。

由于

1 个答案:

答案 0 :(得分:1)

您要做的是构建一个vararg函数。看看这个tutorial如何做到这一点。

具体来说,据我所知,你也会对如何将你的方法中的变量参数列表传递给另一个采用变量参数列表的函数感兴趣(比如你要从你的方法中调用sprintf showMessageDialog:)。这是here的解释。实际上,这很容易做到(例如,使用NSLog):

- (void) showMessageDialog:(NSString *)message, ... {

    va_list argp;

    va_start(argp, msg);
    NSLog(msg, argp);
    va_end(argp);

}