2010-07-15 7 views

risposta

20

Non è possibile memorizzare nil in una classe di raccolta Foundation come NSArray, è necessario utilizzare NSNull. Per verificare se un membro della matrice è NSNull, si dovrebbe fare questo:

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

Se volete vedere quanti elementi presenti nella matrice, utilizzare -[NSArray count]. Se si desidera scorrere la matrice per vedere se qualsiasi oggetto è NSNull, ma non ti importa quale, è possibile utilizzare l'enumerazione veloce o -[NSArray containsObject:]:

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

o

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

ok! grazie per le informazioni! codici utili che potrei usare. – Kenneth

1

Non si può avere valori nulli in un NSArray (o NSMutableArray). Pertanto la tua clausola if non restituirà mai true. Inoltre, è necessario utilizzare nil anziché NULL.

+0

Oh, vedo. non c'è da stupirsi nell'ottenere errori. Grazie! – Kenneth

+0

'nil' e' NULL' sono la stessa cosa. * Per convenzione * usiamo 'nil' per i puntatori agli oggetti e' NULL' per tutto il resto, ma è solo una convenzione. Non c'è differenza tra i due. (Puoi verificarlo facendo cmd-doppio clic su 'nil' e vedendo come è definito) –

+0

sì, hai ragione –

1

Simile a ciò che @Marco ha detto: è garantito che objectAtIndex: non restituirà mai nil a meno che qualcosa non vada in modo orribile. Tuttavia, quando arrivi a quel punto, è comunque troppo tardi e non c'è nulla che tu possa fare (ed è più probabile che tu rilasci un'eccezione prima che ciò accada).

Se è necessario memorizzare un valore per indicare "non c'è niente qui", è necessario utilizzare il singleton [NSNull null]. Questo è esattamente a cosa serve.

+0

ok, capito! – Kenneth

1

Per quanto ne so- Non c'è indice senza oggetto. perché quando rimuovi un oggetto, la matrice verrà ritagliata da sola. Puoi mettere qualche oggetto vuoto come @ "" o NSNull, ma almeno un oggetto.

Un altro punto, si otterrà NSRangeException se l'indice che si sta cercando è fuori limite.

+0

oh capisco. grazie per le informazioni! – Kenneth

2

Prova utilizzando la condizione

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