代码之家  ›  专栏  ›  技术社区  ›  abh

编辑存储在NSString内容中的NSMutableArray的内容

  •  0
  • abh  · 技术社区  · 11 年前

    我有一个函数,它接受参数中的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

    2 回复  |  直到 11 年前
        1
  •  2
  •   Zeeshan    11 年前

    将一个nsarray*数组分配给它,并在其中添加值。 然后按方法添加值 addValuesFromArray 来自引用数组中的数组。

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

        2
  •  1
  •   Mykola Denysyuk    11 年前

    事实上,你错了。如果类实例的属性(或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!