2010-07-12 23 views
5

este es mi strucure datos:Adición de objetos a un NSMutableArray propiedad

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

defino una clase de elemento con todas las propiedades y una clase de grupo como:

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

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

y elemento único con:

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

Ambas clases tienen propiedades y sintetizan. Cuando se inicia la aplicación que inserta datos sobre la estructura de datos con esto:

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]; 

El problema es el siguiente [addObjct group.elements: element1] los. No se ha escrito nada sobre los elementos NSMutableArray.

¿Me podría ayudar a encontrar el error? ¿Hay un mejor método para recuperar datos de estructura (grupos de elemens)?

gracias por ayuda! Andrea

+1

¿Podría agregar las declaraciones de propiedades y el código que inicializa 'elements'? –

+0

¡En este punto supongo que encontraste el problema! De hecho, inicializo los elementos, pero acabo de agregar un elemento NSMutableArray *; para agrupar la definición del objeto. Pensé que @synthesize es suficiente. No sé cómo inicializar los elementos Matriz mutable de elementos de los objetos –

Respuesta

15

@synthesize solo genera el captador y el colocador para su propiedad, usted mismo debe encargarse de la inicialización si es necesario.

Para inicializar la matriz mutable, p. Ej. esto en su inicializador:

- (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]; 
} 
+0

¡¡¡Funciona genial !!!!!! ¡¡¡Gracias!!! (Definí erróneamente el init, por esta razón no incluí ... Tengo que volver a los libros ... :() –

Cuestiones relacionadas