2012-04-02 60 views
7

我宣佈的.h文件NSArray對象如何在目標c中使用NSArray對象的NSArray?

@property (nonatomic, assign) NSArray *scnArray; 

- (void)viewDidLoad下的.h文件中,我創建三個不同的NSArray對象作爲

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

,如果我從任何其他函數訪問此scnArray

NSArray *caseArray = [scnArray objectAtIndex:index]; //索引爲0,1,2 ...

我得到BAD_ACCESS_ERROR。這裏有什麼問題,我如何更正使用它?

+0

您正在將'obj2'和'obj3'的對象添加到'scnArray',但是您沒有獲取(或存儲在任何地方)數組合併產生的數組...看看我的答案... – 2012-04-02 10:02:13

+0

你的財產也應該'strong'或'retain',不要分配。 – 2012-04-02 11:26:42

+0

感謝邁克,改變財產作爲強大的工程偉大。感謝您的投入。 – user1306926 2012-04-02 15:57:25

回答

5

嘗試這種情況:

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

arrayByAddingObjectsFromArray:函數添加的所有對象從陣列B到陣列A,並返回結果(=含有A和B的元件的陣列)。

所以,你應該簡單地得到這一結果... :-)

重要:scnArray必須是一個NSMutableArray陣列,而不是一個NSArray(它是不斷變化的,對吧?);所以請確保您也編輯該部分...

ALSO:NSArray *caseArray = [scnArray objectAtIndex:index]; - 這沒有任何意義。將數組設置爲scnArray的ELEMENT?它不包含數組,對吧?它只包含那些數組的ELEMENTS(我們添加的那些)...

2

arrayByAddingObject:不會將新對象添加到接收器,它會創建一個全新的數組並返回它。你應該使用類似:

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

不要忘記,如果你不使用ARC或GC,所有這些陣列都需要在某些時候被釋放。

+0

我之前用過這個。但我作爲NSArray * caseArray = [scnArray objectAtIndex:1]訪問它;我一直在收到EXE_BAD_ACCESS錯誤。 – user1306926 2012-04-02 11:08:18