2012-04-02 36 views
7

tôi tuyên bố một đối tượng NSArray trong file .h nhưLàm thế nào để sử dụng NSArray của đối tượng NSArray trong mục tiêu c?

@property (nonatomic, assign) NSArray *scnArray; 

và trong file .h dưới - (void)viewDidLoad Tôi tạo ra ba NSArray đối tượng khác nhau như

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

và nếu tôi truy cập scnArray này từ bất kỳ chức năng khác

NSArray *caseArray = [scnArray objectAtIndex:index]; // chỉ mục sẽ là 0, 1, 2 ...

Tôi đang nhận được BAD_ACCESS_ERROR. Vấn đề ở đây là gì và tôi có thể sử dụng nó như thế nào?

+0

Bạn đang thêm các đối tượng từ 'obj2' và' obj3' vào 'scnArray' nhưng bạn không nhận được (hoặc lưu trữ ở bất kỳ đâu) mảng kết quả từ việc hợp nhất các mảng ... Hãy xem câu trả lời của tôi ... –

+0

Thuộc tính của bạn cũng phải là 'strong' hoặc' retain', không được gán. –

+0

Cảm ơn Mike, thay đổi tài sản là những tác phẩm mạnh mẽ tuyệt vời. Cảm ơn tất cả các yếu tố đầu vào của bạn. – user1306926

Trả lời

5

Hãy thử điều này:

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

Chức năng arrayByAddingObjectsFromArray: thêm tất cả các đối tượng từ mảng B để mảng A, và trả kết quả (= mảng chứa cả hai yếu tố A và B).

Vì vậy, bạn chỉ nên GET kết quả đó ... :-)

QUAN TRỌNG:scnArray PHẢI là một mảng NSMutableArray, và KHÔNG một NSArray (nó đang thay đổi, phải không?); do đó, hãy đảm bảo bạn chỉnh sửa phần đó quá ...

CSONG:NSArray *caseArray = [scnArray objectAtIndex:index]; - điều này không có ý nghĩa gì. Đặt mảng thành ELEMENT của scnArray? Nó không chứa mảng, phải không? Nó chỉ chứa ELEMENTS của những mảng đó (những cái chúng ta đã thêm vào) ...

2

arrayByAddingObject: không thêm đối tượng mới vào bộ thu, nó tạo một mảng hoàn toàn mới và trả về nó. Bạn nên sử dụng một cái gì đó như:

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

Đừng quên rằng nếu bạn không sử dụng ARC hoặc GC, tất cả các mảng này sẽ cần phải được phát hành tại một số điểm.

+0

Tôi đã sử dụng ứng dụng này trước đó. Nhưng tôi truy cập này như là NSArray * caseArray = [scnArray objectAtIndex: 1]; Tôi tiếp tục gặp lỗi EXE_BAD_ACCESS. – user1306926

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