2014-03-07 42 views
0

我想创建一个的NSArray填充的NSDictionary的和在控制台打印所有数组元素的所述第一值。[__NSArrayM objectAtIndex:]:索引2超出范围[0..1]”

我收到以下错误:

Terminating app due to uncaught exception 'NSRangeException', reason:' -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]' * First throw call stack: (0x30d77e83 0x3b0d46c7 0x30cadd95 0xb93b3 0xb8e03 0x3175ccdd 0x30d42e7f 0x30d42a9b 0x30d40e23 0x30cab471 0x30cab253 0x359e52eb 0x33560845 0xb8abd 0x3b5cdab7)
libc++abi.dylib: terminating with uncaught exception of type NSException

-(void) listOp { 
    NSDictionary *dictionary; 
    NSMutableArray *array; 
    NSNumber *refNum; 

    int numOp = [_refNum intValue]; 

    self.array = [NSMutableArray arrayWithObjects: self.dictionary, nil]; 
    for (int i = 0; i < numOp; i++){ 
     [self.array insertObject:self.dictionary atIndex:i]; 

     NSDictionary* vardebug = nil; 
     vardebug = [self.array objectAtIndex:numOp]; 
     NSString *valuekey = [self.dictionary valueForKey: @"key"]; 

     NSLog(@"Valuekey is: %@", valuekey); 
    } 
} 

不明白什么错误。

+0

假设numOp = 5。 在for循环的第一次迭代中,self.array在索引5处没有对象(当您想要获取vardebug时),它只有2个对象。 – Larme

+0

你想要做什么? – bsarr007

回答

0

你的代码有点杂乱。声明:

NSDictionary *dictionary; 
NSMutableArray *array; 

之后,你叫

self.dictionary... 
self.array... 

您可以使用自己,如果你有特性,例如;

@property(nonatomic, strong) NSDictionary *dictionary;

所以基本上,如果你想访问:

NSDictionary *dictionary; 
NSMutableArray *array; 

你应该调用,例如:

array = [NSMutableArray arrayWithObjects: dictionary, nil]; 

没有自我。但是,也许你在这个例子和财产中都显示了伊娃,并且你是按目的做到的。我只是想说,如果你按目的做,你应该使用不同的名字来使你的代码更清晰。

您在线路发生错误:

vardebug = [self.array objectAtIndex:numOp]; 

在你的第一个循环迭代您已经(分配)期间添加阵列中的一个项目,你插入另一个,所以你数组包含2个对象,但你numOp等于2,表示数组中的第3个对象(数组为零),因此调用超出限制。我猜你想将其更改为:

vardebug = [self.array objectAtIndex:i]; 

希望这有助于

+0

是的,我已经在函数中添加了这个声明,但是这些声明是在.h之类的属性中声明的,所以我从函数中调用。感谢您的帮助,这是一个失误。 –

0

通过vardebug = [self.array objectAtIndex:i];更换vardebug = [self.array objectAtIndex:numOp];应避免碰撞。

+0

当你在索引0的NSMutableArray中有一些项目,然后在索引0处插入另一个项目时,应用程序不会崩溃,它将在索引0处插入第二个项目,并将第一个项目移动到索引1处。 – Greg

+0

好的,我更新了我的答案! – bsarr007

相关问题