【发布时间】:2011-07-27 10:18:27
【问题描述】:
这确实是一个新手问题,但它会帮助我更好地理解 Objective-c 的工作原理。我在 iOS 应用程序中使用了 UIActionSheet。查看文档,这是相关的 init 方法:
- (id)initWithTitle:(NSString *)title delegate:(id < UIActionSheetDelegate >)delegate cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...
其中 otherButtonTitles 是一个逗号分隔的 NSString 列表。在我看来,这与 NSArray 相对应,所以为了造成崩溃,我尝试了:
NSArray *buttons = [NSArray arrayWithObjects:@"B1",@"B2",nil];
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Actions" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Delete" otherButtonTitles:buttons];
然后显然应用程序由于按钮 NSArray 而崩溃。 这听起来与 Java varargs 非常相似,在一个类中你可以有类似的东西:
public void myMethod(String... param) {...};
对该方法的合法调用是:
myClass.myMethod("x");
myClass.myMethod("x","Y");
我的 iOS 应用中有很多使用 NSArray 的方法:
[myClass myMethod:[NSArray arrayWithObjects:....]];
避免分配 NSArray 而是传递逗号分隔的 NSString 列表对我来说非常方便。我怎样才能做到这一点 ?我的意思是,从 myMethod 的角度来看,接收到什么类型的参数以及应该如何考虑它?例如,我怎样才能循环通过 NSString ???
谢谢
【问题讨论】:
标签: objective-c nsstring nsarray