我的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];
这不会给我任何编译器警告或错误但是当我按下按钮时,应用程序崩溃了。我做错了什么,我该如何解决?
答案 0 :(得分:2)
selectedani //this is the long int that represents the button
NSString *anistr = [animalz objectAtIndex:selectedani];
[self rearrange:anistr];
答案 1 :(得分:1)
animalz
是NSString
个对象的数组,但是当您调用[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或属性。