2013-07-03 55 views
-6

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

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

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

+1

崩溃时的调用堆栈是什么?调试器控制台中的输出是什么? –

+3

这只是错误的:'int indexani = [animalz objectAtIndex:selectedani];'objectAtIndex将始终返回一个对象指针(或nil)。 –

+0

@AdamRosenfield错误是:线程1:程序接收到的信号:EXC_BAD_ACCESS – user2510806

回答

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

我试过了,我的应用又崩溃了。我收到了错误“线程1:编程接收到的信号:EXC_BAD_ACCESS” – user2510806

+0

你做了什么来调试崩溃?你有没有在你的代码中设置断点,并通过这段代码来看看你是否能够通过它? –

+0

好吧,当我只有长整型它工作正常。只有当我尝试访问数组时,它不起作用。 – user2510806

1

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

+0

我该如何解决这个问题? – user2510806

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作为实例变量或属性。