user3327900
user3327900

Reputation: 13

iOS - NSMutableArray won't get filled

I basically have have a custon subclass of an UIViewController, which has a NSMutableArray called waypoints. I initialise it in the -(void)viewDidLoad method of the controller with

waypoints = [[NSMutableArray alloc] init];

Later, in a method which gets called via a presentedViewController with some parameters including a NSMutableDictionary as waypointData, I call

[waypoints insertObject:waypointData atIndex:0];

and I also tried

[waypoints addObject:waypointData];

But neither seems to work!

I logged some stuff there to make it more clear. The parameters get transmitted correctly and the NSMutableDictionary saved under waypointData is the correct content it should be. Logging the waypoints array before the insertion shows it empty (which is correct; app got launched; no data added yet) and after the insertion it's still empty. The log:

2014-02-19 14:40:11.050 xxx[xxx] waypoints before insertion: (null:)
2014-02-19 14:40:11.051 xxx[xxx] INSERT WAYPOINT
2014-02-19 14:40:11.052 xxx[xxx] waypoints after insertion: (null:)

INSERT WAYPOINT gets logged directly before the insertion, so the program routine is really executing the insertObject:atIndex: method.

TL;DR: Even though insertObject:atIndex: (and -addObject:) for an NSMutableArray get called the object won't get inserted in the array.

EDIT:
This method gets called in -viewDidLoad too:

- (void)loadWaypoints {
    id unarchivedObject = [NSKeyedUnarchiver unarchiveObjectWithFile:[[self applicationDocumentsDirectory] stringByAppendingString: kAppDataFilePlistName]];
    waypoints = (NSMutableArray *)unarchivedObject;
}

unarchivedObject of course is NULL if there hasn't been anything saved yet. Thanks to 0x7fffffff.

Upvotes: 0

Views: 135

Answers (4)

Sandeep Agrawal
Sandeep Agrawal

Reputation: 425

Please use following code:

if(waypoints == nil){

waypoints = [[NSMutableArray alloc] init];

}

[waypoints addObject:waypointData];

Upvotes: -4

Finn Larsen
Finn Larsen

Reputation: 2199

easiest way to make sure your 'waypoints' array isn't nil is doing this:

if (!waypoints)
{ 
    waypoints = [NSMutableArray new];
}
[waypoints insertObject:waypointData atIndex:0];

or

if (!waypoints)
{ 
    waypoints = [NSMutableArray new];
}
[waypoints addObject:waypointData];

Upvotes: 1

Duncan C
Duncan C

Reputation: 131491

It sounds like your waypoints array is nil. Post your header file, including the declaration of waypoints. Post your whole viewDidLoad method where you create the empty array.

The 2 most likely causes I can think of are that you declared waypoints as weak, or that you have a local variable waypoints in your viewDidLoad and you're creating an empty array in the local variable but not saving it to the instance variable.

Set a breakpoint in viewDidLoad at the line that creates the empty array. Step over it and make sure your array is being created. Then right-click on the variable down in the variables section of the debugger window and add a watchpoint to that variable. If it is getting cleared out then the breakpoint will cause your program to break at the offending line.

(My post assumes that you are using ARC. Are you?)

Upvotes: 0

Tancrede Chazallet
Tancrede Chazallet

Reputation: 7255

Check your waypoints NSArray it shouldn't be nil when you call at [waypoints addObject:waypointData];

Upvotes: 4

Related Questions