2012-07-28 89 views
0

我有一個名爲showMessage的函數,它顯示警報消息對話框。該函數將字符串作爲參數,並將此字符串顯示爲對話框消息。在開始我想通過字符串的方式,也刺痛與它一起格式化,這樣的事情:傳遞字符串格式化程序作爲參數

[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]; 
} 

有了這個,我可以通過多種格式化(我的意思是參數,它會繼續佔位符)函數調用期間,但我失去了一些東西不允許我在消息上顯示我的格式化參數。我的意思是,我總是在消息對話框中看到這條消息:「你好%@」 你能幫我解決這個問題嗎?我知道我已經錯過了一些東西,例如我已經做出了將多個參數傳遞給函數調用的方式,但是我想我沒有把它們放在佔位符上。

注:我想讓功能像NSLog一樣工作,我們稱之爲NSLog並傳遞參數。

謝謝

+0

您需要使用您的格式字符串中的'stringWithFormat'一個電話,那麼結果傳遞給init語句的'message' PARM。 – 2012-07-28 11:28:56

+0

嗨,謝謝。我想讓功能像NSLog如何工作,我的意思是我們不必使用stringWithFormat對他們的權利? – 2012-07-28 11:31:41

+0

你認爲NSLog是如何工作的? – 2012-07-28 12:51:15

回答

1

你正在做的是建立一個可變參數函數。看看這tutorial如何做到這一點。

具體來說,據我所知,你也會對如何將你的變量參數列表從你的方法傳遞給另一個帶有可變參數列表的函數感興趣(比如你想從你的showMessageDialog:中調用sprintf)。這是解釋here。其實,這是很容易做到(例如,用的NSLog):

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

    va_list argp; 

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

} 
+0

嗨,謝謝。所以我必須在C中實現? – 2012-07-28 11:36:30

+0

您可以使用可變參數ObjC方法,但其基本機制是舊的可變參數機制。另見我的編輯。最後,C是ObjC的一個子集,你可以在ObjC中使用任何你想要的C ... – sergio 2012-07-28 11:41:18

相關問題