Objective c replaceObjectAtIndex似乎不起作用

Objective c replaceObjectAtIndex似乎不起作用,objective-c,nsarray,Objective C,Nsarray,这里使用一个基本的objective c示例,尝试对数组使用replaceObjectAtIndex,但它似乎不起作用 我的代码: NSMutableArray *myArray=[NSMutableArray array]; [myArray addObject:@"First string"]; [myArray addObject:@"Second string"]; [myArray addObject:@"Third string"]; NSStri

这里使用一个基本的objective 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”,但它仍然显示“secondstring”

输出:

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
请告知


谢谢

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

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

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

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

在获取原始字符串时,替换数组的对象,然后再次打印原始字符串。

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

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

嗯,我认为newElement是指向数组元素1的指针,所以当该元素被更改时,newElement将反映它。我想不是。谢谢你的回答。C风格的数组按照你描述的方式工作。指向数组的指针,只是指向第一个元素的指针,然后可以添加元素大小的倍数,以获得指向数组下一个元素的指针。另一方面,目标C
NSArray
s是对象。数组中的元素也是对象。所有指针都指向实际对象,而不是数组中的某个占位符。@Live2Enjoy7
newElement
是一个局部变量,包含指向对象的指针。如果不将指针重置为指向其他对象,它仍然指向原始对象。@Live2Enjoy:newElement是指向对象@“第二个字符串”的指针。数组中还有一个指向该对象的指针。当您更改数组中的指针时,另一个指针没有更改。如果您更改了对象本身(例如,如果它是一个可变字符串,并且您更改了它的内容),那么只要有指向该对象的指针,就会显示它。但为指针指定新值不会改变程序中的任何其他指针。@jlehr是的,如果您抓住指向carray[2]的指针,并在数组中放入新值,指针现在将指向新值。如果您的c样式数组中有id类型的东西,那么上面的指针将是指向指针ptr的指针**