2010-07-15 2 views

Répondre

20

Vous ne pouvez pas stocker nil dans une classe de collection Foundation telle que NSArray, vous devez utiliser NSNull. Pour vérifier si un membre du réseau est NSNull, vous feriez ceci:

for (int i = 0; i < 6; i ++) { 
    if ([array objectAtIndex:i] == [NSNull null]) { 
     NSLog(@"object at index %i has no data", i); 
    } 
} 

Si vous voulez voir combien d'articles sont dans le tableau, utilisez -[NSArray count]. Si vous voulez parcourir le tableau pour voir si un objet est NSNull, mais vous ne vous inquiétez pas lequel, vous pouvez utiliser l'énumération rapide ou -[NSArray containsObject:]:

for (id anObject in array) { 
    if (anObject == [NSNull null]) { 
     // Do something 
    } 
} 

ou

if ([array containsObject:[NSNull null]]) { 
    // Do something 
} 
+0

ok! Merci pour l'info! codes utiles que je pourrais utiliser. – Kenneth

1

Vous ne pouvez pas avoir des valeurs nulles dans une NSArray (ou NSMutableArray). Donc, votre clause if ne sera jamais vraie. En outre, vous devez utiliser nil au lieu de NULL.

+0

oh je vois. Pas étonnant que je reçoive des erreurs. Merci! – Kenneth

+0

'nil' et' NULL' sont la même chose. * Par convention * nous utilisons 'nil' pour les pointeurs d'objets et' NULL' pour tout le reste, mais c'est juste convention. Il n'y a pas de différence entre les deux. (Vous pouvez le vérifier en double-cliquant sur un "nil" et en voyant ce que cela signifie) –

+0

ouais, vous avez raison –

1

Semblable à ce que @Marco a déclaré: vous avez la garantie que objectAtIndex: ne renverra jamais nil à moins que quelque chose ne se passe horriblement mal. Cependant, au moment où vous arrivez à ce point, il est trop tard de toute façon et il n'y a rien que vous puissiez faire (et vous êtes plus susceptible d'obtenir une exception levée avant que cela ne se produise).

Si vous devez stocker une valeur pour indiquer "il n'y a rien ici", vous devez utiliser le singleton [NSNull null]. C'est exactement à quoi ça sert.

+0

d'accord! – Kenneth

1

Pour autant que je sache - Il n'y a pas d'index sans objet. parce que lorsque vous supprimez un objet, le tableau sera coupé par lui-même. Vous pouvez mettre un objet vide comme @ "" ou NSNull, mais un objet au moins.

Un autre point, vous obtiendrez NSRangeException si l'index que vous recherchez est hors limite.

+0

oh je vois. Merci pour l'info! – Kenneth

2

Essayez d'utiliser la condition

if ([[Array objectAtIndex:i] length] == 0) { 
// Do what you want 
} 
Questions connexes