這真的是一個新手問題,但它會幫助我更好地理解Objective-c的工作原理。我在iOS應用程序中使用了UIActionSheet。看着文檔,這是相關的init方法:爲什麼UIActionSheet init方法接受一個字符串數組而不是NSString
- (id)initWithTitle:(NSString *)title delegate:(id <UIActionSheetDelegate>)delegate cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...
凡被說成是一個逗號分隔otherButtonTitles NSString的列表。在我的心目中,這是記者到一個NSArray,所以用caushing崩潰的意圖,我想:
NSArray *buttons = [NSArray arrayWithObjects:@"B1",@"B2",nil];
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Actions" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Delete" otherButtonTitles:buttons];
然後很明顯的應用程序崩潰,因爲按鈕的NSArray的。 這聽起來是類同的Java可變參數,在一類,你可以有這樣的:
public void myMethod(String... param) {...};
對此方法的合法調用:
myClass.myMethod("x");
myClass.myMethod("x","Y");
我有很多在我的iOS方法出了使用的NSArray的應用:
[myClass myMethod:[NSArray arrayWithObjects:....]];
那將是非常方便的,我以避免NSArray中的頁頭,而是傳遞一個逗號分隔的NSString的列表。我怎樣才能做到這一點 ?我的意思是,從myMethod的角度來看,接受了哪種類型的參數,應該如何考慮?例如,如何循環槽NSString?
感謝
呃,可能是因爲別的東西而崩潰了。但是,爲什麼UIActionSheet中的參數未標記爲(NSArray *)otherButtonTitles? – Leonardo
因爲它不需要數組,所以它需要一個逗號分隔的NSString列表。 – 2011-07-27 13:06:35
對不起,我再次讀到你的答案,這不是我一審問的。我知道你的例子是有效的,事實上這是我設置它的方式。但我想了解爲什麼NSString的簽名也可以是「逗號分隔的NSString」,而不僅僅是一個NSString。我試圖在文檔中找到這種證據,以及如何在自定義方法的情況下可以解析逗號分隔列表。 – Leonardo