我想创建一个 NSArray 填充 NSDictionary 并在控制台中打印每个数组元素的第一个值。
我收到以下错误:
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);
}
}
不明白出了什么问题。
最佳答案
你的代码有点乱。您声明:
NSDictionary *dictionary;
NSMutableArray *array;
然后你打电话
self.dictionary...
self.array...
例如,如果您有属性(property),则使用 self ;
@
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];
希望这有帮助
关于objective-c - [__NSArrayM objectAtIndex :]: index 2 beyond bounds [0 . 。 1]',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22252123/