2009-12-05 77 views
2

似乎應該很容易將布爾值添加到NSMutableArray。嘗試插入nil

假設toDoArray被初始化爲一個N​​SMutableArray。以下內容:

BOOL checkBoxState = NO; 
[toDoArray addObject:checkBoxState]; 

生成錯誤「嘗試插入nil」。

將負布爾值添加到可變數組的正確方法是什麼?

回答

5

NSMutable陣列需要的ID,目標C的怪異的一部分的ID是任何對象的,但不是原始(例如,int s爲原語,而NSArray s爲對象,並且在延伸部,id多個)。

This question可能會有所幫助。

+3

沒有什麼奇怪的有關'id'。 Objective-C沒有固定的根類,因此「id」作爲對任何類的實例的引用而存在。 – bbum 2009-12-05 19:36:31

+1

我想這只是我發現它很奇怪。 – 2009-12-05 20:53:47

6

正如其他人所說,NSMutableArray只能包含Objective-C對象。它們不必是NSObject的子類,但這是最典型的。

然而,長你看到的attempt to insert nil.運行時錯誤之前,你應該已經看到了編譯器警告:

warning: passing argument 1 of 'addObject:' makes pointer from integer without a cast 

這是[用含糊不清,迂迴的方式]告訴你到底是什麼問題;你正試圖將某些東西插入一個不是[指向對象]的指針的數組中。

注意警告並修復它們。大多數情況下,警告的存在會指示運行時錯誤或崩潰。

0

在將其放入集合對象(NSArray,NSDictionary等)之前,需要使用NSNumber來包裝任何基本類型(BOOL,int,NSInterger等)。

添加BOOL數組:從陣列

BOOL checkBoxState = NO; 
NSNumber* n = [NSNumber numberWithBool:checkBoxState]; 
[toDoArray addObject:n]; 

獲取BOOL:

NSNumber* n = [toDoArray objectAtIndex:0]; 
BOOL checkBoxState = [n boolValue]; 
相關問題