objective-c - [__NSArrayM objectAtIndex :]: index 2 beyond bounds [0 . 。 1]'

标签 objective-c crash nsarray nsdictionary

我想创建一个 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/

相关文章:

Android - 应用程序在 Android 手机上崩溃,但在 Android 模拟器 (Android Studio) 上不会崩溃

iphone - 值的 NSArray,要按字母顺序显示在部分中。如何分配到正确的部分?

debugging - 在高负载下为 ASP.NET 应用程序提供服务时,IIS 会崩溃。如何排除故障?

objective-c - 应用程序委托(delegate)和应用程序的正确连接是什么

objective-c - 根据字典中的参数合并两个由字典组成的 NSArrays

ios - NSPointerFunctionsCopy 困惑

java - 当我在每次交替运行的选项卡式 Activity 中按下按钮时,我的应用程序崩溃了

iphone - 如何查找数组是否包含对象(不使用 for 循环)?

ios - 如何从 NSArray : 添加项目

ios - 如何在键盘已经打开的情况下呈现 JSQMessagesViewController?