2013-09-26 50 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