0

我是 obj-c 的新手(这是我的第一天课,嗯),我正在尝试使用多维数组中的随机字符串更改标签。另外,每次按下按钮时,您都会切换阵列。我知道这有点奇怪,嗯……这是 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 (不带引号)......可能我在最后一段代码中搞砸了......

4

2 回答 2

1

实际上你在数组中有数组

将此行替换为您的:

NSString *q = [[array objectAtIndex: (arc4random()% [array count] )] objectAtIndex:0];
于 2012-07-10T13:12:29.487 回答
1

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

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

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

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

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

因此,或者创建不需要的数组,您可以将所有最后 8 行替换为:

NSArray *array = [button isSelected] ?第二阵列:第一阵列;
self.label.text = [array objectAtIndex:arc4_uniform([array count])];
于 2012-07-10T14:35:43.460 回答