Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding objects to a NSMutableArray property

this is my data strucure:

group [1...n] {
  id,
  name,
  elements : [1...n]
}

I define a class for element with all properties and a class for group as:

@interface Group : NSObject {    
    NSInteger groupID;
    NSString *groupName;        
    NSMutableArray *elements;       
}

@property (assign, readwrite) NSInteger groupID;
@property (assign, readwrite) NSString *groupName;
@property (assign, readwrite) NSMutableArray *elements;

and single element with:

@interface Element : NSObject {
    NSInteger elementID;
    NSString *elementName;
}
@property (assign, readwrite) NSInteger elementID;
@property (assign, readwrite) NSString *elementName;

Both classes have properties and synthesize. When application start I inserted data on data structure with this:

arrGroup = [NSMutableArray array];
[arrGroup retain];
Element *element1 = [[Element alloc] init];
element1.elemenID = 1;
element1.elemenName = @"Andrea";

Element *element = [[Element alloc] init];
element2.elementID = 2;
element2.elementName = @"Andrea2";

Group *group = [[Group alloc] init];    
group.groupID = 1;
group.groupName = @"Grup 1";    
[group.elements addObject:element1];
[group.elements addObject:element2];

[contact1 release];
[contact2 release];

[arrGroup addObject:group];

The problem is this the [group.elements addObjct:element1]. Nothing has been written on elements NSMutableArray.

Could you help me to find the error? There is a better method to retrieve structure data (groups of elemens)?

thanks for help! Andrea

like image 310
Andrea Girardi Avatar asked Jul 12 '10 18:07

Andrea Girardi


1 Answers

@synthesize only generates the getter and the setter for your property, you have to take care of initialization yourself if needed.

To initialize the mutable array do e.g. this in your initializer:

- (id)init { // or however it is named
    if ((self = [super init])) {
        elements = [[NSMutableArray alloc] init];
        // ... more?
    }
    return self;
}

- (void)dealloc {
    [elements release]; // don't forget to clean up
    // ... more?
    [super dealloc];
}
like image 81
Georg Fritzsche Avatar answered Oct 10 '22 08:10

Georg Fritzsche