Objective c 目标C集合中的C样式指针
我需要更改已放入Objective c 目标C集合中的C样式指针,objective-c,c,pointers,nsarray,Objective C,C,Pointers,Nsarray,我需要更改已放入NSMutableArray的项的值,而不知道它是什么变量。可能吗?在C语言中,我相信这可以通过使用指针来实现 int i = 0; int *j = &i; *j = 5; NSLog (@"'%d'",i); // Prints '5' 如何将其转换为目标C?因此,如果我将2个NSString放入NSMutableArray中: NSString *text1 = @"Hello"; NSMutableString *text2 = @"World"; NSMuta
NSMutableArray
的项的值,而不知道它是什么变量。可能吗?在C语言中,我相信这可以通过使用指针来实现
int i = 0;
int *j = &i;
*j = 5;
NSLog (@"'%d'",i); // Prints '5'
如何将其转换为目标C?因此,如果我将2个NSString放入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'
我该怎么做?此语法在最后一个代码块的第一行给出了一个错误表达式不可赋值
如果我稍微修改一下,使其看起来更像第一个代码块中的C代码:
NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:&text1,&text2,nil];
及
我得到一个ARC错误不允许将间接指针隐式转换为指向“id”的Objective-C指针,第一行是ARC
,第二行是从不兼容的类型“NSString*”分配给“id”。我尝试了其他一些轻微的调整,但都有一些错误
很明显,我做得不对,但我已经没有主意了
编辑:它认为我正在尝试创建一个新字符串,并替换我以前在索引1中拥有的字符串。这不是我想做的。我基本上是在尝试使用数组来更改变量的值,而不必使用变量的名称(在我的实际项目中,当我需要更改它时,我不知道它的名称)。在所有面向对象编程语言(如Objective-C)中,我们使用对象正是为了这个目的
所以你走对了方向。NSArray或NSMutableArray分别允许您收集任何类型的对象并使用索引访问它们
你的
真像
[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"];
您看不到不同文本的原因是因为objective C string是不可变的,并且您实际上已使用以下命令将一个新对象插入到数组中:
[arr objectAtIndex:1]=@“所有人”
在您的示例中,您可以通过使用NSMutableString,从数组中检索它,并对其调用setString来实现所需的功能
在一般情况下,如果您将一个对象插入NSArray,并且您正在修改该对象,它将反映在所有其他对它的引用中。对NSMutableArray
部分的理解很好,但我想我没有解释我要做的事情。我不想替换我在数组中引用的对象,我想引用同一个对象,但将它的值更改为不同的值。这有意义吗?我编辑了我的OP,试图更好地解释我的目标。@GeneralMike听起来像是在寻找exchangeObjectAtIndex:withObject:
或自定义CFArray
,您可以向其添加原始指针,然后执行*CFArrayGetValueAtIndex(arr,idx)=foo
。嗯,这怎么不是编程的问题?“最低限度的理解”。缺席.omg,太多的derp。我确实声明了我的text2
作为NSMutableString
,这正是你提到的原因,但后来我忘记了我需要调用setString
来更改它的值(而不仅仅是=@“所有人”
).我以为我在你最后一句话的某个地方看到了你所说的,但当这不起作用时,我以为不是这样,开始到处寻找另一种方法,当时我一直都有正确的想法,只是用错误的语法分配了一个新值。我不敢相信我错过了,非常感谢。
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"];