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?
Vous ne pouvez pas ajouter nil lorsque vous appelez addObject
.
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]];
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.
Si vous voulez vraiment un article Null-ish dans votre collection, NSNull est là pour ça.
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 .
nil est utilisé pour terminer le tableau
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.
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.
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.