我有一个函数在参数中接受NSString变量,并在末尾附加Array,它给出了已在类中定义的数组的名称。 我该如何编辑该数组呢?
-(void) editArray:(NSString*)str{ //suppose str value is first
NSString* myArrayName = [str stringByAppendingString:@"Array"]; //firstArray
myArrayName包含已在类中定义的NSMutableArray的名称。如何访问此数组并编辑它的值?
NSMutableArray *myArray=[self valueForKey:myArrayName]; //suppose myArrayName is equal to @"firstArray"
上述技术不起作用,因为它将firstArray的内容复制到myArray,如果我更改myArray的内容,它不会影响firstArray
答案 0 :(得分:2)
使一个nsarray *数组分配它并在其中添加您的值。
然后通过方法addValuesFromArray
从参考数组中的数组添加值。
不要分配你的参考数组,因为它会失去先前的参考。
答案 1 :(得分:1)
实际上,你错了。如果您的类实例的属性(或iVar)为NSMutableArray
(正如您所说的那样' firstArray'),并且在您调用
NSMutableArray *myArray=[self valueForKey:myArrayName];
myArray ,您定义的变量 firstArray 将引用相同的 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!