2012-04-02 107 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