编辑 NSMutableArray 的内容,谁的名字存储在 NSString 的内容中

Edit contents of NSMutableArray who's name is stored in contents of NSString

我有一个函数,它在参数中接受 NSString 变量,并在末尾附加 Array,为它提供已在 class 中定义的数组名称。 我该如何编辑该数组?

-(void) editArray:(NSString*)str{ //suppose str value is first 

NSString* myArrayName = [str stringByAppendingString:@"Array"]; //firstArray  

myArrayName 包含已在 class 中定义的 NSMutableArray 的名称。我如何访问此数组并编辑它的值?

NSMutableArray *myArray=[self valueForKey:myArrayName]; //suppose myArrayName is equal to @"firstArray"

上述技术不起作用,因为它将 firstArray 的内容复制到 myArray,如果我更改 myArray 的内容,它不会影响 firstArray

其实,你错了。如果您的 class 实例具有 NSMutableArray 的 属性(或 iVar)(正如您所说的 'firstArray'),并且在您调用

时实例化了
NSMutableArray *myArray=[self valueForKey:myArrayName];

myArray 和您定义的变量 firstArray 将引用 same NSMutableArray 对象。 因此,如果之后您更改了 myArray 的内容(例如 [myArray removeLastObject]),myArray 和 firstArray 仍将引用相同的数组对象(现在将包含 objectsCount-1。)

因此,如果您将另一个对象分配给 myArray 并期望 firstArray 也将引用该对象,则可能会出错:

NSMutableArray *myArray=[self valueForKey:myArrayName]; //firstArray and myArray becomes equal
myArray = [NSMutableArray arrayWithArray:anotherArray]; //firstArray and myArray not equal anymore!

制作一个 nsarray *array alloc 并在其中添加您的值。 然后通过方法 addValuesFromArray 从引用数组中的数组添加值。

不要分配您的引用数组,因为它会丢失以前的引用。