Objective-C访问/更改多维数组中的数组元素(NSArray)

时间:2010-01-18 19:34:14

标签: objective-c arrays multidimensional-array

我正在尝试更改多维数组中的值,但却出现编译错误:

warning: passing argument 2 of 'setValue:forKey:' makes pointer from integer without a cast

这是我的内容数组:

NSArray *tableContent = [[NSArray alloc] initWithObjects:
                [[NSArray alloc] initWithObjects:@"a",@"b",@"c",nil],
                [[NSArray alloc] initWithObjects:@"d",@"e",@"f",nil],
                [[NSArray alloc] initWithObjects:@"g",@"h",@"i",nil],
                 nil];

这就是我试图改变价值的方式:

[[tableContent objectAtIndex:0] setValue:@"new value" forKey:1];

解决方案:

 [[tableContent objectAtIndex:0] setValue:@"new val" forKey:@"1"];

所以数组键是一个字符串类型 - 有点奇怪,但很高兴知道。

4 个答案:

答案 0 :(得分:11)

NSMutableArray *tableContent = [[NSMutableArray alloc] initWithObjects:
                    [NSMutableArray arrayWithObjects:@"a",@"b",@"c",nil],
                    [NSMutableArray arrayWithObjects:@"d",@"e",@"f",nil],
                    [NSMutableArray arrayWithObjects:@"g",@"h",@"i",nil],
                     nil];

[[tableContent objectAtIndex:0] replaceObjectAtIndex:1 withObject:@"new object"];

您不希望alloc+init用于子阵列,因为子阵列的保留计数太高(alloc为+1,然后再为+1)插入外部数组)。

答案 1 :(得分:2)

您正在创建不可变数组,并尝试更改存储在其中的值。请改用NSMutableArray。

答案 2 :(得分:1)

你想要NSMutableArray的insertObject:atIndex:replaceObjectAtIndex:withObject:(如果已存在,前者将推回现有元素,而后者将替换它但不适用于尚未存在的索引占据)。消息setValue:forKey:为其第一个参数采用值类型,为其第二个参数采用NSString。你传递的是一个整数而不是NSString,它永远不会有效。

答案 3 :(得分:0)

很抱歉回答1年半的问题:D
我遇到了同样的问题,最后我通过计算元素来解决它,然后执行addObject推送到数组元素