2012-07-10 23 views
0

我是新来obj-c(这是我的第一天课程eheh),我试图用多维数组中的随机字符串更改标签。再加上,每次按下按钮时都会切换阵列。我知道这是一个有点奇怪...... EHEH这是IBAction为:obj-c从数组中提取字符串

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

回答

1

其实u有阵

R内部数组E放置此行与你:

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

什么问题能源部OP这里? – Mark 2012-07-10 14:23:55

1

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

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

当您从array获取对象时,它始终是用于初始化它的同一个对象:要么是firstArray要么是secondArray

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

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

因此,而不是或创建不必要的数组,你可能只是更换所有的8最后一行用这样的:

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