我想创建一个 NSArray 填充 NSDictionary ,并在控制台中打印每个数组元素的第一个值。
我收到以下错误:
由于未捕获的异常'NSRangeException'而终止应用, 原因:' - [__ NSArrayM objectAtIndex:]:索引2超出边界[0 .. 1]' * 第一次抛出调用堆栈:(0x30d77e83 0x3b0d46c7 0x30cadd95 0xb93b3 0xb8e03 0x3175ccdd 0x30d42e7f 0x30d42a9b 0x30d40e23 0x30cab471 0x30cab253 0x359e52eb 0x33560845 0xb8abd 0x3b5cdab7)
libc ++ abi.dylib:以未捕获的类型异常终止 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 :(得分:0)
你的代码有点乱。你声明:
NSDictionary *dictionary;
NSMutableArray *array;
之后你打电话给
self.dictionary...
self.array...
如果您拥有财产,则使用自己;例如;
@ property(nonatomic, strong) NSDictionary *dictionary;
所以基本上如果你想访问你的:
NSDictionary *dictionary;
NSMutableArray *array;
你应该打电话,例如:
array = [NSMutableArray arrayWithObjects: dictionary, nil];
没有自我。但也许你在这个例子中显示了ivar和属性,而且你是按目的去做的。我只想说,如果你按目的这样做,你应该使用不同的名称,以使你的代码更清晰。
您在行中发生的错误:
vardebug = [self.array objectAtIndex:numOp];
在你的第一个循环迭代中,你已经在数组中有一个项目(在分配期间添加),你插入另一个项目,所以你的数组包含2个对象,但你的numOp等于2,它引用数组中的第3个对象(数组为零)基地)因此呼叫超出了界限。我想你想把它改成:
vardebug = [self.array objectAtIndex:i];
希望这个帮助
答案 1 :(得分:0)
将vardebug = [self.array objectAtIndex:numOp];
替换为vardebug = [self.array objectAtIndex:i];
可以避免崩溃。