2

在这里使用一个基本的目标 c 示例,尝试将 replaceObjectAtIndex 用于数组,但它似乎不起作用。

我的代码:

 NSMutableArray *myArray=[NSMutableArray array];
    [myArray addObject:@"First string"];
    [myArray addObject:@"Second string"];
    [myArray addObject:@"Third string"];

    NSString *newElement=[myArray objectAtIndex:1];
    NSLog(@"New object at index 1 BEFORE is %@", newElement);
    [myArray replaceObjectAtIndex:1 withObject:@"Hello"];
    NSLog(@"New object at index 1 AFTER is %@", newElement);

理论上,newElement 的输出现在应该显示“Hello”,但它仍然显示“Second String”

输出:

2012-05-30 11:21:16.638 cocoa lab[753:403] New object at index 1 BEFORE is Second string
2012-05-30 11:21:16.641 cocoa lab[753:403] New object at index 1 AFTER is Second string

请指教

谢谢你

4

2 回答 2

5

替换后需要从数组中获取新值

// ...
[myArray replaceObjectAtIndex:1 withObject:@"Hello"];

/* ADD THIS */
newElement=[myArray objectAtIndex:1];

NSLog(@"New object at index 1 AFTER is %@", newElement);

在您获取原始字符串的那一刻,替换数组的对象,然后再次打印出原始字符串。

于 2012-05-30T15:26:25.407 回答
0

您需要newElement在调用后重置 的值replaceObjectAtIndex:,因此在第二次记录该值之前添加另一行:

newElement=[myArray objectAtIndex:1];

更新 1

不要感到难过——我们都曾在某个时候对自己做过这件事。:-)

更新 2

顺便说一句,通常避免此类问题的一个好方法是养成在这种情况下使用单独的局部变量的习惯,例如,您可以重写您发布的代码如下:

NSString *initialValue = [myArray objectAtIndex:1];
NSLog(@"New object at index 1 BEFORE is %@", initialValue);

[myArray replaceObjectAtIndex:1 withObject:@"Hello"];

NSString *newValue = [myArray objectAtIndex:1];
NSLog(@"New object at index 1 AFTER is %@", newValue);
于 2012-05-30T15:26:52.083 回答