2012-09-05 9 views
7

Quiero añadir un objeto en un NSMutableArray:NSMutableArray está vacía después de addObject

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

Ésta es la salida:

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

¿Cómo es posible esto, añado un objeto, en la siguiente línea, todavía está vacía. El NSMutableArray no es nil, porque eso generaría una excepción.

¿Alguien una conjetura?

Respuesta

10

No se generaría una excepción si fuera nil. Todavía puede enviar un mensaje a un objeto nil si generalmente responde a ese mensaje. En este caso, obtendrás 0. Creo que no estás asignando la matriz. Asegúrese de que usted está haciendo esto:

array = [[NSMutableArray alloc] init]; 

Como consejo depuración, si no está seguro sobre el estado de un objeto y quiere asegurarse de hecho el objeto existe y está listo para ser utilizado, utilice assert(appdelegate.objects); Si la matriz es nula, su código dejará de ejecutarse en esta línea. Si no se detiene en esta línea, entonces sabrá que el objeto existe en la memoria.

+0

De hecho, fue nulo. Usé un ejemplo de demostración que tampoco asignó/init la matriz, pero ese fue un ejemplo de trabajo. ¿Cómo podría eso funcionar? – TomWebDev

+0

@TomWebDev hmm no podría funcionar. Tenía que haber sido asignado en alguna parte, quizás el código sea difícil de detectar. ¿Tienes un enlace al ejemplo? – Snowman

+0

Probablemente la matriz fue creada con arrayWithCapacity? Porque no encontrará ninguna asignación de la matriz. – NDY

0

Su NSMutableArray es ciertamente casi nulo. No generará una excepción, ya que el envío de cualquier mensaje al nil en ObjC es una operación nula y se comportaría como lo está viendo, con un valor de retorno de 0 o nil, etc.

Intente registrar eso también para verificarlo

Cuestiones relacionadas