-6

我在我的 ViewDidLoad 中有一个像这样声明的 NSArray, animalz = [NSArray arrayWithObjects:@"rabbit",@"deer",@"ox", @"horse", @"cow", nil];并且我有一个 UIView 子类,我编写了一个 NSString 并重新排列它。用户按下一个按钮,与该按钮关联的数字是我需要的数组中的数字(例如,如果数字是 3,那么我需要值“horse”,但如果按钮是 4,那么我需要“cow” "); 目前这些数字以 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];

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

4

3 回答 3

2
selectedani //this is the long int that represents the button
NSString *anistr = [animalz objectAtIndex:selectedani];
[self rearrange:anistr];
于 2013-07-03T18:33:53.840 回答
1

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

于 2013-07-03T18:28:17.130 回答
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 或属性。

于 2013-07-03T18:58:25.750 回答