No se pueden agregar elementos a un ivar NSMutableArray

Resuelto Curnelious asked hace 13 años • 4 respuestas

Mi objetivo es agregar una cadena a una matriz y lo hago en un método al que llamo.

En este método, obtengo un valor nulo en la matriz y no sé por qué. Tengo esto al comienzo de mi clase:

NSMutableArray *listOfEvents;

y un método que invoco en cada evento:

-(void)EventList
{
    [listOfEvents addObject:@"ran"];
    NSLog(@"%@", listOfEvents);     
}

Me meto (null)en el registro.

Si pongo la definición de la matriz NSMutableArray *listOfEvents;en el cuerpo de la función, obtengo el valor de la cadena @"ran"cada vez, por lo que la matriz siempre tiene un solo valor, en lugar de tener muchas cadenas nombradas @"ran".

¿Qué hay de malo en esto? Parece que no puedo entender algo sobre las matrices, aunque he leído los documentos varias veces.

Curnelious avatar Aug 20 '11 00:08 Curnelious
Aceptado

Supongo que no lo has inicializado listOfEvents.

Asegúrate de hacerlo listOfEvents = [[NSMutableArray alloc] init];en el método de tu clase init. También asegúrese de publicarlo en el deallocmétodo de su clase.

thomashw avatar Aug 19 '2011 17:08 thomashw

Si recibe nilsu mensaje de registro, debe asegurarse de que listOfEvents no sea nulo antes de agregar su objeto. ES DECIR:

-(void)EventList
{
    if (listOfEvents == nil) {
        listOfEvents = [[NSMutableArray alloc] init];
    }
    [listOfEvents addObject:@"ran"];
    NSLog(@"%@",listOfEvents);      
}

En Objective-C, los mensajes con voidtipos de retorno se envían nila una tierra de ninguna parte absolutamente silenciosa.

Además, por razones de equilibrio, asegúrese de tener una [listOfEvents release]llamada en su deallocimplementación.

Ben Mosher avatar Aug 19 '2011 17:08 Ben Mosher