2009-12-05 6 views
2

Il semble qu'il devrait être facile d'ajouter un booléen à un NSMutableArray.Tentative d'insertion nulle

Supposons toDoArray est initialisé en tant que NSMutableArray. Ce qui suit:

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

Génère l'erreur "tentative d'insertion nulle".

Quelle est la bonne façon d'ajouter un booléen négatif à un tableau mutable?

Répondre

5

tableaux NSMutable nécessitent un identifiant, une partie de l'objectif bizarre C. Un identifiant est un objet, mais pas une primitive (par exemple, int s sont des primitives, tandis que NSArray s sont des objets, et en extension, id s).

This question pourrait aider.

+3

Rien d'étrange 'id'. Objective-C n'a pas de classe racine fixe et, par conséquent, 'id' existe en tant que référence à une instance de n'importe quelle classe. – bbum

+1

Je suppose que c'est juste moi qui trouve ça bizarre alors. –

6

Comme d'autres l'ont dit, NSMutableArray ne peut contenir que des objets Objective-C. Ils ne doivent pas être des sous-classes de NSObject, mais c'est le plus typique.

Cependant, bien avant que vous voyez jamais l'erreur d'exécution attempt to insert nil., vous auriez dû voir un avertissement du compilateur:

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

Il est [d'une manière vague et rond-point] vous dire exactement quel est le problème; vous essayez de coller quelque chose dans un tableau qui n'est pas un pointeur [vers un objet].

Faites attention aux avertissements et corrigez-les. La plupart du temps, la présence d'un avertissement indique une erreur d'exécution ou un crash.

0

Vous devez utiliser NSNumber pour envelopper tous les types primitifs (BOOL, int, NSInterger, etc.) avant de les placer dans un objet de collection (NSArray, NSDictionary, etc.).

Ajouter BOOL tableau:

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

Get BOOL de tableau:

NSNumber* n = [toDoArray objectAtIndex:0]; 
BOOL checkBoxState = [n boolValue];