变量值的奇怪变化

时间:2013-09-26 09:03:52

标签: objective-c

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

    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

3 个答案:

答案 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单例的实例填充数组。