web-dev-qa-db-fra.com

comment ajouter nil à nsmutablearray?

NSArray *array = [[NSArray alloc] initWithObjects:@"ΕΛΤΑ",
                      @"ΕΛΤΑ COURIER", @"ACS", @"ACS ΕΞΩΤΕΡΙΚΟ", 
                      @"DHL", @"INTERATTICA", @"SPEEDEX", 
                      @"UPS", @"ΓΕΝΙΚΗ ΤΑΧΥΔΡΟΜΙΚΗ", @"ΜΕΤΑΦΟΡΙΚΕΣ ΕΞΩΤΕΡΙΚΟΥ", nil];

Cela fonctionne car il a zéro à la fin.

Mais j'ajoute des objets comme ça: addObject:name etc ... Donc, à la fin, je dois ajouter nil, je fais ceci addObhect: nil mais quand je lance l'application, elle se bloque toujours à cellForRowAtIndexPath:

comment puis-je faire ce travail?

Ok, je n'ai pas besoin d'ajouter zéro

Quelle est la raison pour laquelle mon application se bloque alors?

51
stefanosn

Vous ne pouvez pas ajouter nil lorsque vous appelez addObject.

19
mr-sk

Si vous devez ajouter un objet nil à une collection, utilisez la classe NSNull:

La classe NSNull définit un objet singleton utilisé pour représenter les valeurs nulles dans les objets de collection (qui n'autorisent pas les valeurs nulles).

En supposant que "tableau" est de type NSMutableArray:

....
[array addObject:[NSNumber numberWithInt:2];
[array addObject:@"string"];
[array addObject:[NSNull null]];
230
Adrian Kosmaczewski

Vous n'avez pas besoin d'appeler [addObject:nil]

Le nil dans initWithObjects: n'est là que pour indiquer à la méthode où se termine la liste, en raison du fonctionnement de C varargs. Lorsque vous ajoutez des objets un par un avec addObject: vous n'avez pas besoin d'ajouter un néant.

26
Mike Weller

Si vous voulez vraiment un article Null-ish dans votre collection, NSNull est là pour ça.

15
David Grant

Vous devez ajouter la classe NSNull et la meilleure façon de le faire est la suivante:

NSArray *array = @[ @"string", @42, [NSNull null] ];

Je recommande personnellement d'utiliser une valeur spécifique comme 0 au lieu de null ou nil dans la conception de votre code, mais parfois vous devez ajouter null.

Il y a une bonne explication de this Apple reference .

6
mert

nil est utilisé pour terminer le tableau

6
Tomen

nil n'est pas un objet que vous pouvez ajouter à un tableau: un tableau ne peut pas contenir nil. C'est pourquoi addObject:nil se bloque.

5
mouviciel

passez votre objet à travers cette méthode lors de l'ajout au tableau pour éviter essayez d'insérer aucun objet à partir d'objets se bloque.

-(id) returnNullIfNil:(id) obj  {
    return (obj == nil) ? ([NSNull null]) : (obj);
}

[NSNull null] renvoie un objet null qui représente nil.

0
Manjuhere

Vous ne pouvez pas ajouter un objet à un NSArray car cette classe est immuable. Vous devez utiliser NSMutableArray si vous souhaitez modifier le tableau après sa création.

0
TechZen