I've got an array with items, and I want to pass these in to a variable-length method. How do you do that?
I.e., I've got this (for example):
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
[[UIAlertView alloc] initWithTitle:@"title" message:@"message" delegate:nil cancelButtonTitle:[array objectAtIndex:0] otherButtonTitles:[array objectAtIndex:1], [array objectAtIndex:2], nil];
But imagine that array could have a variable length of i开发者_开发百科tems, so you cant hardcode it like this.
The documentation for the otherButtonTitles
parameter in -[UIAlertView initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:]
states that:
Using this argument is equivalent to invoking addButtonWithTitle: with this title to add more buttons.
Have you tried this:
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
UIAlertView *view = [[UIAlertView alloc] initWithTitle:@"title" message:@"message" delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles:nil];
for (NSString *s in array) {
[view addButtonWithTitle:s];
}
- (id) initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles ...
{
va_list args;
va_start(args, otherButtonTitles);
for (NSString *arg = otherButtonTitles; arg != nil; arg = va_arg(args, NSString*))
{
//do something with nsstring
}
va_end(args);
}
You could also just make an argument in your functions that accepts an array (easy solution)
Anyway the ... notation is for a variable amount of arguments at the end of a function.
精彩评论