Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use NSArray of NSArray object in objective c?

I declared a NSArray object in .h file as

@property (nonatomic, assign) NSArray  *scnArray;

and in .h file under - (void)viewDidLoad I created three different NSArray objects as

NSArray  *obj1 = [[NSArray alloc] initWithObjects:@"1",@"0",@"0",nil];
NSArray  *obj2 = [[NSArray alloc] initWithObjects:@"0",@"3",@"0",nil];
NSArray  *obj3 = [[NSArray alloc] initWithObjects:@"0",@"0",@"5",nil];

scnArray = [[NSArray alloc] initWithArray:obj1];
[scnArray arrayByAddingObjectsFromArray:obj2];
[scnArray arrayByAddingObjectsFromArray:obj3];

and if I access this scnArray from any other function

NSArray *caseArray = [scnArray objectAtIndex:index];//index will be 0, 1, 2...

I am getting BAD_ACCESS_ERROR. What is the problem here and how can I correct to use it?

like image 724
user1306926 Avatar asked Apr 02 '12 09:04

user1306926


2 Answers

Try this :

NSArray  *obj1 = [[NSArray alloc] initWithObjects:@"1",@"0",@"0",nil];
NSArray  *obj2 = [[NSArray alloc] initWithObjects:@"0",@"3",@"0",nil];
NSArray  *obj3 = [[NSArray alloc] initWithObjects:@"0",@"0",@"5",nil];

scnArray = [[NSArray alloc] initWithArray:obj1];
scnArray = [scnArray arrayByAddingObjectsFromArray:obj2];
scnArray = [scnArray arrayByAddingObjectsFromArray:obj3];

The arrayByAddingObjectsFromArray: function adds all objects from array B to array A, and return the result (=the array containing both A's and B's elements).

So, you should simply GET that result... :-)

IMPORTANT : scnArray MUST be an NSMutableArray array, and NOT an NSArray (it's changing, right?); so make sure you edit that part too...

ALSO : NSArray *caseArray = [scnArray objectAtIndex:index]; - this doesn't make any sense. Setting an array to an ELEMENT of the scnArray? It doesn't contain arrays, right? It just contains ELEMENTS of those arrays (the ones we've added)...

like image 118
Dr.Kameleon Avatar answered Sep 23 '22 00:09

Dr.Kameleon


arrayByAddingObject: does not add the new object to the receiver, it creates a completely new array and returns it. You should use something like:

scnArray = [[NSArray alloc] initWithObjects: obj1, obj2, obj3, nil];

Don't forget that if you are not using ARC or GC, all of these arrays will need to be released at some point.

like image 23
JeremyP Avatar answered Sep 22 '22 00:09

JeremyP