2012-09-05 9 views
7

Voglio aggiungere un oggetto in un NSMutableArray:NSMutableArray è vuoto dopo addObject

NSLog(@"Object text: %@", object.text); 
NSLog(@"Object: %@", object); 
[appdelegate.objects addObject:object]; 
NSLog(@"Objects array size: %i", [appdelegate.objects count]); 

Questa è l'uscita:

Object text: This is the text 
Object: <Object: 0x6e762c0> 
Objects array size: 0 

Come è possibile, aggiungo un oggetto, sul prossimo linea, è ancora vuota. Il NSMutableArray non è nil, perché ciò solleverebbe un'eccezione.

Qualcuno può indovinare?

risposta

10

Non solleverebbe un'eccezione se fosse nil. È comunque possibile inviare messaggi a un oggetto nil se di solito risponde a tale messaggio. In questo caso, otterrai solo 0. Penso che tu non stia assegnando l'array. Assicurarsi che si sta facendo questo:

array = [[NSMutableArray alloc] init]; 

Come un suggerimento di debug, se non siete sicuri circa lo stato di un oggetto e desidera assicurarsi che l'oggetto esiste davvero ed è pronto per essere utilizzato, utilizzare assert(appdelegate.objects); Se la matrice è nulla, il tuo codice smetterà di essere eseguito su questa linea. Se non si ferma su questa linea, allora sai che l'oggetto esiste in memoria.

+0

Era davvero nulla. Ho usato un esempio dimostrativo che non allocava/inizializzava l'array, ma quello era un esempio funzionante. Come potrebbe funzionare? – TomWebDev

+0

@TomWebDev hmm non potrebbe funzionare. Doveva essere stato assegnato da qualche parte, forse il codice è difficile da individuare. Hai un link all'esempio? – Snowman

+0

Probabilmente la matrice è stata creata con arrayWithCapacity? Perché non troverai alcuna allocazione dell'array. – NDY

0

Il tuo NSMutableArray è quasi certamente nullo. Non genererà un'eccezione, perché l'invio di qualsiasi messaggio a nil in ObjC è un no-op e si comporterebbe come stai vedendo, con un valore di ritorno pari a zero o nil, ecc.

Prova a registrare anche quello per ricontrollare.

Problemi correlati