NSArray值为NSString

时间:2013-07-03 18:24:36

标签: ios nsstring nsarray

我的ViewDidLoad中有一个这样的NSArray animalz = [NSArray arrayWithObjects:@"rabbit",@"deer",@"ox", @"horse", @"cow", nil];我有一个我编写的UIView子类,它接受一个NSString并重新排列它。用户按下按钮,与按钮相关联的数字是我需要的数组中的数字(例如,如果数字是3,那么我需要值“马”但是如果按钮是4那么我需要“牛” “);目前这些数字以long int的形式出现,我无法在nsarray中获得相应的值。我试过了:

    selectedani //this is the long int that represents the button
    int indexani = [animalz objectAtIndex:selectedani];
    NSString *anistr = [NSString stringWithFormat:@"%i",indexani];
    [self rearrange:btistr];

这不会给我任何编译器警告或错误但是当我按下按钮时,应用程序崩溃了。我做错了什么,我该如何解决?

3 个答案:

答案 0 :(得分:2)

selectedani //this is the long int that represents the button
NSString *anistr = [animalz objectAtIndex:selectedani];
[self rearrange:anistr];

答案 1 :(得分:1)

animalzNSString个对象的数组,但是当您调用[animalz objectAtIndex:selectedani]时,会将结果分配给int。

答案 2 :(得分:0)

首先,您在使用之前是否已指定 selectedani ?如果没有,那么你不应该使用selectedani。它可能是内存位置或按钮的某些其他属性可能会有所不同。

[animalz objectAtIndex:selectedani]

返回一个对象,将此对象转换为int而不是你想要的,当然它也不是索引。

你能做什么?将标签号动态分配给相应的按钮,如

button.tag = 1;//or something like it

然后在 IBAction 方法中检索标记并使用它来解析数组。

- (IBAction)buttonPressed:(id)sender
{
  UIButton *pressedBtn = (UIButtton *)sender;
  NSString *anistr = [animalz objectAtIndex:pressedBtn.tag];

  //do what you want to do with the string
  [self rearrange:anistr];
}

在这种情况下,将 animalz 声明为iVar或属性。