Cannot add items to an NSMutableArray ivar

My goal is to add a string to array, and I do that in a method which I call.

In this method, I get a null value in the array, and don't know why. I have this at the start of my class:

NSMutableArray *listOfEvents;

and a method which I call on each event:

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

I get (null) in the log.

If I put the array definition NSMutableArray *listOfEvents; in the function body, I get the string value @"ran", each time, so the array always has only one value, instead of having many strings named @"ran".

What's wrong with this? It seems that I can't understand something about arrays, even though I have read the documents a number of times.


Solution 1:

I'm assuming you haven't initialized listOfEvents.

Make sure you do listOfEvents = [[NSMutableArray alloc] init]; in your class's init method. Also make sure you release it in your class's dealloc method.

Solution 2:

If you're getting nil in your log message, you need to make sure listOfEvents is non-nil before adding your object. IE:

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

In Objective-C, messages with void return types sent to nil go to absolutely-silent nowhere-land.

Also, for the sake of balance, be sure you have a [listOfEvents release] call in your dealloc implementation.

Solution 3:

Apparently you're not initializing your array.

NSMutableArray *listOfEvents = [[NSMutableArray alloc] init];

If that's your problem, I suggest reading the docs again. And not the NSMutableArray docs. Go back to The Objective-C Programming Language and others.

Solution 4:

You need to alloc the NSMutableArray. Try doing this first -

NSMutableArray *listOfEvents = [[NSMutableArray alloc] init];

After this you could do what you what you planned...