这真的是一个新手问题,但它会帮助我更好地理解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