【问题标题】:obj-c fetching strings from arrayobj-c 从数组中获取字符串
【发布时间】:2012-07-10 13:04:17
【问题描述】:

我是 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(不带引号)...可能我在最后一段代码中搞砸了...

ty

【问题讨论】:

    标签: objective-c arrays string cocoa


    【解决方案1】:

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

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

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

    因此,您会在期望字符串的位置得到一个字符串数组。使用stringWithFormat: 时,说明符%@ 将替换为该对象的字符串描述。

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

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

    NSArray *array = [button isSelected] ?第二阵列:第一阵列;
    self.label.text = [array objectAtIndex:arc4_uniform([array count])];

    【讨论】:

      【解决方案2】:

      实际上你在数组中有数组

      用你的替换这一行:

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

      【讨论】:

      • OP 这里有什么问题?
      猜你喜欢
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多