使用ObjectAtIndex可以提供超出边界的错误

时间:2011-03-05 12:09:34

标签: iphone objective-c sdk nsmutablearray

我想做一些非常简单的事情,但是我得到了一个错误,我错过了什么?

int i;
int count;

TutorialAppDelegate *appDelegate = (TutorialAppDelegate *)[[UIApplication sharedApplication] delegate];
Animals *aAnimal = (Animals *)[appDelegate.animals objectAtIndex:i];
count = [animals count];


if (i < count)
{
    NSLog(@"%@",aAnimal.animalName);
}

ERROR:

 '*** -[NSMutableArray objectAtIndex:]: index 22510243 beyond bounds [0 .. 5]'

0 ... 5是正确的!数组中只有6个值。

并使用

NSLog(@"%@",aAnimal.animalName);

out if if函数返回正确的值,当我也将i更改为0时。

2 个答案:

答案 0 :(得分:5)

你需要初始化我。

int i = 0;

默认情况下,int不会设置为零或任何合理的值。您可以通过添加以下行来检查:

NSLog(@"Value of i without initialising is: %d", i);

答案 1 :(得分:0)

请初始化您的可变数组 -

appDelegate.animals=[[NSMutableArray alloc] initWithArray:(NSArray *)array];

并检查你的数组,你在数组元素的末尾提到了nil对象 -

NSMutableArray* animals=[[NSMutableArray alloc] 
initWithObjects:@"one 1",@"two 2",nil];