obj-c从数组中获取字符串

时间:2012-07-10 13:04:17

标签: objective-c arrays string cocoa

我是obj-c的新手(这是我的第一天课程eheh),我正在尝试用多维数组中的随机字符串更改标签。此外,每次按下按钮,您都会切换阵列。我知道这有点奇怪......这就是IBAction:

UIButton *button = (UIButton *)sender;
NSMutableArray *firstArray = [NSMutableArray array];
[firstArray addObject:@"foo"];

NSMutableArray *secondArray = [NSMutableArray array];
[secondArray addObject:@"bar"];

NSMutableArray *frasi = [NSMutableArray array];
[frasi addObject:firstArray];
[frasi addObject:secondArray];

NSMutableArray *array  = [NSMutableArray arrayWithObjects:[frasi objectAtIndex:[button isSelected]], nil];
NSString *q = [array objectAtIndex: (arc4random()% [array count] )];
NSString *lab = [NSString stringWithFormat:@"%@", q];
self.label.text = lab;

一切正常,但新标签是

(     "foo" )

而不仅仅是foo(没有引号)...可能我在最后一段代码中搞乱了......

TY

2 个答案:

答案 0 :(得分:1)

实际上你在数组中有数组

将此行替换为您的行:

NSString *q = [[array objectAtIndex: (arc4random()% [array count] )] objectAtIndex:0];

答案 1 :(得分:1)

因此,您创建了2个可变数组,然后将它们添加到新的可变数组frasi中。然后,您将获得这两个数组中的一个并将其用作新数组arrayWithObjects:的单个元素(因为您使用arrayWithArray:而不是array)。

所以array是一个包含单个数组元素的数组(而不是您可能认为的字符串数组)。

当您从array获取对象时,它始终与用于初始化对象的单个对象相同:firstArraysecondArray

所以你得到一个字符串数组,你期望一个字符串。使用stringWithFormat:时,说明符%@将替换为该对象的字符串描述。

字符串将自身作为自己的描述返回。但是数组的描述是用逗号分隔并用括号括起来的所有元素的列表,这就是你得到( "foo" )的原因。

因此,或者创建不需要的数组,您可以用这个替换所有第8行:

NSArray *array = [button isSelected] ? secondArray : firstArray;
self.label.text = [array objectAtIndex:arc4_uniform([array count])];