-1

我需要更改已放入 中的项目的值NSMutableArray,而实际上不知道它是什么变量。那可能吗?在 C 中,我相信这可以使用指针来完成

int i = 0;
int *j = &i;
*j = 5;
NSLog (@"'%d'",i); // Prints '5'

我如何将它翻译成Objective C?因此,如果我有 2 个 NSStrings 放入 NSMutableArray:

NSString *text1 = @"Hello";
NSMutableString *text2 = @"World";
NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:text1,text2,nil];

然后过一段时间

[arr objectAtIndex:1] = @"Everyone";
NSLog (@"'%@'",text2); // I want this to print 'Everyone'

我该怎么做?此语法在最后一个代码块的第一行给出错误Expression is not assignable

如果我稍微改变一下,让它看起来更像第一个代码块中的 C 代码:

NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:&text1,&text2,nil];

*[arr objectAtIndex:1] = @"Everyone"

Implicit conversion of an indirect pointer to an Objective-C pointer to 'id' is disallowed with ARC我在第一行和Assigning to 'id' from incompatible type 'NSString *'第二行收到 ARC 错误。我已经尝试了一些其他的细微调整,但它们都抛出了一些错误。

显然我做的不对,但我已经没有想法了。

编辑:它认为我正在尝试创建一个新字符串并替换我之前在索引 1 处的字符串。这不是我想要做的。我基本上是在尝试使用数组来更改变量的值,而不必使用变量的名称(在我的实际项目中,当我需要更改它时,我不会知道它的名称是什么)。

4

2 回答 2

1

您没有看到不同文本的原因是因为目标 C 字符串是不可变的,并且您实际上已将一个新对象插入到数组中: [arr objectAtIndex:1] = @"Everyone";

在您的示例中,您可以通过使用 NSMutableString 来实现您正在寻找的东西,从数组中检索它,然后在其上调用 setString 。

在一般情况下,如果您将一个对象插入到 NSArray 中,并且您正在修改该对象,它将反映在对它的所有其他引用中。

于 2013-08-09T14:14:14.443 回答
0

在所有像Objective-C这样的面向对象编程语言中,我们正是为了这个目的使用对象。

所以你在正确的轨道上。NSArray 或 NSMutableArray 分别允许您收集任何类型的对象并使用索引访问它们。

您的

[arr objectAtIndex:1] = @"Everyone";

真的很像

[arr addObject:@"Everyone"]; // That would add it to the end or

[arr insertObject:@"Everyone" atIndex:1]; // that would insert it at index 1. 

请记住,数组从索引 0 开始。并且arr必须NSMutabelArray为此类型。

现代的 Ojective-C 编译器提供了快捷方式,例如

NSLog (@"index %d of the array: %@", 1, arr[1]); 

关于你的第二个问题:

NSArray *arr = [NSArray arrayWithObject:@"me", @"everybody else", nil]; //now goes as
NSArray *arr = @[@"me", @"everybody else"];
于 2013-08-09T13:04:46.703 回答