我是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
答案 0 :(得分:1)
实际上你在数组中有数组
将此行替换为您的行:
NSString *q = [[array objectAtIndex: (arc4random()% [array count] )] objectAtIndex:0];
答案 1 :(得分:1)
因此,您创建了2个可变数组,然后将它们添加到新的可变数组frasi
中。然后,您将获得这两个数组中的一个并将其用作新数组arrayWithObjects:
的单个元素(因为您使用arrayWithArray:
而不是array
)。
所以array
是一个包含单个数组元素的数组(而不是您可能认为的字符串数组)。
当您从array
获取对象时,它始终与用于初始化对象的单个对象相同:firstArray
或secondArray
。
所以你得到一个字符串数组,你期望一个字符串。使用stringWithFormat:
时,说明符%@
将替换为该对象的字符串描述。
字符串将自身作为自己的描述返回。但是数组的描述是用逗号分隔并用括号括起来的所有元素的列表,这就是你得到( "foo" )
的原因。
因此,或者创建不需要的数组,您可以用这个替换所有第8行:
NSArray *array = [button isSelected] ? secondArray : firstArray; self.label.text = [array objectAtIndex:arc4_uniform([array count])];