1

当我记录变量的值时,我有这段简单的代码:

    NSLog(@"set.nflag - %@", set.nflag1);
    if (set.nflag1 == [NSNumber numberWithInt:1])
    {
        NSLog(@"set.nflag - %@", set.nflag1);
        [sectionArray insertObject:_checkboxCell atIndex:set.nflag1];
    }

在最后一行我崩溃了一个日志是:

2013-09-26 11:36:12.537 PharmaTouch[1325:c07] set.nflag - 1  2013-09-26 11:36:12.537 PharmaTouch[1325:c07] set.nflag - 1  2013-09-26 11:36:12.538 PharmaTouch[1325:c07] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM insertObject:atIndex:]: index 127347632 beyond bounds for empty array'

什么可能导致价值改变

设置.nflag1

?

4

3 回答 3

2

异常表明 sectionArray 未分配。在执行之前将其添加到某处。

sectionArray = [NSMutableArray alloc] init];

尝试添加:

NSInteger index = [set.nflag1 intValue]; 
[sectionArray insertObject:_checkboxCell atIndex:index];
于 2013-09-26T09:07:36.377 回答
2

在您的代码中,

set.nflag1

是 NSNumber* 类型。这是一个指针,而不是 NSUInteger。做这个:

[sectionArray insertObject:_checkboxCell atIndex:set.nflag1.unsignedIntegerValue];

此外,在比较 NSNumber 时,请使用isEqualToNumber:方法或仅在比较之前检索 int。

确保在尝试插入之前分配 NSMutableArray。另外,注意不要给它太大的索引

如果 index 大于数组中的元素数,则引发 NSRangeException。

于 2013-09-26T09:09:56.040 回答
1

1 超出了空 0 索引数组的范围。尝试添加保护以在插入前检查数组长度。或者尝试简单地将其添加到数组的末尾,或者如果您确实需要同名索引处的 NSNumber,则使用 NSNull 单例的实例填充您的数组。

于 2013-09-26T09:09:52.217 回答