当我记录变量的值时,我有这段简单的代码:
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'
导致
值变化的原因set.nflag1
?
答案 0 :(得分:2)
该异常显示未分配sectionArray。在执行此操作之前将其添加到某处。
sectionArray = [NSMutableArray alloc] init];
尝试添加:
NSInteger index = [set.nflag1 intValue];
[sectionArray insertObject:_checkboxCell atIndex:index];
答案 1 :(得分:2)
在您的代码中,
set.nflag1
的类型为NSNumber *。这是一个指针,而不是NSUInteger。 这样做:
[sectionArray insertObject:_checkboxCell atIndex:set.nflag1.unsignedIntegerValue];
此外,在比较NSNumbers时,请使用 isEqualToNumber:方法或在比较之前检索int。
确保在尝试插入之前分配NSMutableArray。另外,注意不要给它太大的索引
如果index大于数组中的元素数,则引发NSRangeException。
答案 2 :(得分:1)
1超出空0索引数组的范围。 尝试添加防护装置以在插入前检查阵列长度。 或者尝试将其添加到数组的末尾或 如果你真的需要同名索引的NSNumber,请使用NSNull单例的实例填充数组。