2013-09-26 53 views
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' 

什么能引起对于

set.nflag1变化值

+0

为什么你觉得值被改变 – hooleyhoop

+0

我们可以看到从日志它等于1如果 - 之前,同为内犹如─而目前尚不清楚那等于127347632 –

+0

尝试增加NSInteger的指数= [set.nflag1 intValue]; [sectionArray insertObject:_checkboxCell atIndex:index]; –

回答

2

该异常显示sectionArray未分配。在执行之前将其添加到某处。

sectionArray = [NSMutableArray alloc] init];

尝试增加:

NSInteger index = [set.nflag1 intValue]; 
[sectionArray insertObject:_checkboxCell atIndex:index]; 
+0

谢谢!但它是在if语句 –

+0

之前分配和初始化的。 if(array == nil){...创建新数组...},然后再添加任何内容。 – uchuugaka

+1

编辑我的答案的其他选项。 –

1

1超出一个空0索引数组的边界。 尝试添加一个保护来检查插入前的数组长度。 或者尝试简单地将它添加到数组的末尾或者 如果您真的需要同名索引处的NSNumber,请使用NSNull单例的实例填充数组。

2

在你的代码中,

set.nflag1 

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

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

此外,比较NSNumbers时,使用isEqualToNumber:方法或者获取比较之前的INT。

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

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

+1

也==不应该用来比较NSNumber – hooleyhoop

+0

编辑答案,谢谢。 – lawicko