如何根据数组中的对象数动态创建NSString对象?

时间:2010-08-18 03:16:33

标签: iphone objective-c

我最喜欢的论坛的成员,我遇到了一个简单的问题(归结为我相当新的事实)......

我正在使用行动表。我不知道要显示多少个按钮,所以我决定设置动作表委托以使用字符串变量显示总共四个按钮,知道如果我只需要显示2,我可以将第三个变量设置为NIL并实现那个目标。

示例:

NSString *firstVehicle = [[NSString alloc] initWithString:[myVehicleList objectAtIndex:0]];
            NSString *secondVehicle = [[NSString alloc] initWithString:[myVehicleList objectAtIndex:1]];
            NSString *thirdVehicle = [[NSString alloc] initWithString:[myVehicleList objectAtIndex:2]];
            NSString *fourthVehicle = [[NSString alloc] initWithString:[myVehicleList objectAtIndex:3]];

            UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Please select a vehicle:" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:firstVehicle, secondVehicle, thirdVehicle, fourthVehicle, nil];
            NSLog(@"firstOtherButtonIndex in the List is %i", [actionSheet firstOtherButtonIndex]);
            [actionSheet showInView:self.view];
            [actionSheet release];
            break;

话虽如此,我并不总是知道我将创建四个字符串...当我拉回myVehicleList数组时,我可以使用count方法来确定我有多少变量。

问题:智能程序员如何实际解决这个问题?这意味着,如何在检查数组时仅使用返回的计数来循环通过for语句,以便只建立一定数量的字符串并将下一个字符串设置为nil?

这有意义吗?我可以做几天的IF语句,对吧。如果count = 4,则设置所有四个字符串。但如果count为3,我将三个字符串设置为数组对象值,将第四个字符串设置为nil。但如果计数为2,我将两个字符串设置为数组对象值,将第三个字符串设置为nil,依此类推。

必须有一种更有效的方法来动态创建字符串吗?我想我可以使用快速枚举,但是如何动态创建一个唯一的字符串对象......

我希望我能说清楚。

谢谢!

3 个答案:

答案 0 :(得分:0)

我更喜欢使用字符串数组。

答案 1 :(得分:0)

你遇到的真正问题是没有好的方法在动态数组和varargs参数之间进行转换(也就是说,你可以将任意数量的变量作为参数传递)。如果你想以循环方式进行并仍然使用varargs参数,最好的方法是创建一个像NSString *strings[4] = {nil}这样的数组,循环遍历它,然后传递strings[0], strings[1], strings[2], strings[3]作为参数。

但我不会这样做。这真的是管道胶带。我将仅使用取消按钮创建工作表,然后循环遍历要用作标题和[sheet addButtonWithTitle:title]的字符串的NSArray。

答案 2 :(得分:0)

NSMutableArray *vehicles = [[NSMutableArray alloc] init];

[vehicles addObject:@"One"];
[vehicles addObject:@"Two"];
[vehicles addObject:@"Three"];
[vehicles addObject:@"..."];
[vehicles addObject:@"Ten"];

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Please select a vehicle:" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:nil];
for (NSString *vehicle in vehicles) {
    [actionSheet addButtonWithTitle:vehicle];
}   
[actionSheet showInView:self.view];
[actionSheet release];