2010-07-12 40 views
5

đây là strucure dữ liệu của tôi:Thêm đối tượng để sở hữu một NSMutableArray

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

tôi định nghĩa một lớp cho các phần tử với tất cả các tài sản và một lớp học cho nhóm như:

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

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

và yếu tố duy nhất với:

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

Cả hai lớp đều có thuộc tính và tổng hợp. Khi ứng dụng bắt đầu tôi chèn dữ liệu về cấu trúc dữ liệu với điều này:

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

Vấn đề là này [group.elements addObjct: element1]. Không có gì được viết trên các phần tử NSMutableArray.

Bạn có thể giúp tôi tìm lỗi không? Có một phương pháp tốt hơn để lấy dữ liệu cấu trúc (các nhóm elemens)?

cảm ơn bạn đã trợ giúp! Andrea

+1

Bạn có thể thêm khai báo thuộc tính và mã khởi tạo 'phần tử' không? –

+0

Tại thời điểm này, tôi cho rằng bạn đã tìm thấy sự cố! Tôi thực sự khởi tạo các phần tử nhưng tôi chỉ thêm một phần tử NSMutableArray *; để định nghĩa đối tượng nhóm. Tôi nghĩ rằng @synthesize là đủ. Tôi không biết làm thế nào để khởi tạo các yếu tố Mutable Array của các đối tượng yếu tố –

Trả lời

15

@synthesize chỉ tạo getter và setter cho tài sản của bạn, bạn phải tự lo cho bản thân khi khởi tạo nếu cần.

Để khởi tạo mảng có thể thay đổi, ví dụ: điều này trong trình khởi tạo của bạn:

- (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

Tuyệt vời nó hoạt động !!!!!! Cảm ơn!!! (Tôi đã định nghĩa sai init, vì lý do này mà tôi không bao gồm ... Tôi đã quay lại những cuốn sách .... :() –

Các vấn đề liên quan