如何在Objective-C中使用NSArray对象的NSArray?

9
我在 .h 文件中声明了一个 NSArray 对象,代码如下:
@property (nonatomic, assign) NSArray  *scnArray;

在 `.h` 文件中,在 `- (void)viewDidLoad` 下面,我创建了三个不同的 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];//index将会是0、1、2......

我会得到BAD_ACCESS_ERROR。问题出在哪里?如何纠正以便使用它?


你正在将obj2obj3中的对象添加到scnArray中,但是你没有获取(或存储)合并后的数组结果...看一下我的答案... - Dr.Kameleon
你的属性应该是strong或者retain,而不是assign - Mike Weller
谢谢Mike,将属性更改为strong非常好用。感谢大家的建议。 - user1306926
2个回答

7

试试这个:

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数组(它正在改变,对吧?); 因此,请确保您也编辑了这部分...

另外:NSArray *caseArray = [scnArray objectAtIndex:index]; - 这没有任何意义。将一个数组设置为scnArray的一个元素?它不包含数组,对吧?它只包含那些数组的元素(我们添加的那些元素)...


2

arrayByAddingObject:方法并不会将新对象添加到原数组中,它会创建一个全新的数组并返回。建议使用以下方式:

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

请不要忘记,如果您没有使用ARC或GC,所有这些数组在某个时刻都需要被释放。


我之前用过这个。但是我访问它时,使用了NSArray *caseArray = [scnArray objectAtIndex:1]; 我一直收到EXE_BAD_ACCESS错误。 - user1306926

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接