在NSMutableDictionary中多次添加相同的数组

时间:2013-06-03 05:21:56

标签: iphone ios6

我正在尝试在数组中添加值并将该数组存储在字典中。实际上,UICollectionView中有一些部分,每个部分都包含其中的项目。每次数组为一个部分添加值时,它会将其添加到字典中然后清除数组,并在下次数组为下一部分添加值时再次将其放入字典中,但是在删除数组对象时字典不保存该值。下面是我试过的代码。

  NSMutableArray *arrStatus = [seatsDict objectForKey:0];
        if(arrStatus == nil)
        { 
            NSMutableArray *array = [NSMutableArray array];
            array = arrSeatsStatus;
            [seatsDict setObject:array forKey:[NSString stringWithFormat:@"%d",i]];
            i++;
            [arrSeatsStatus removeAllObjects];
        }
        else{       
        NSLog(@"arrStatus:%@", arrStatus);
        [seatsDict setObject:arrSeatsStatus forKey:[NSString stringWithFormat:@"%d",i]];
        i++;
        [arrSeatsStatus removeAllObjects];
        }

在上面的代码数组中,arrStatus始终为null,但字典不是。以上代码没有给出期望的结果。当数组清除时,上面的代码使字典为空。 请指导以上。

1 个答案:

答案 0 :(得分:1)

您正在添加一个指向数组的指针,因此当字典引用数组时,它会引用原始数组,即从中删除项目的数组。相反,您将需要创建另一个数组实例以属于字典而只需要创建字典。 mutableCopy方法属于NSArray,用于在NSMutableArray(不可变,因此无法添加/删除项目)时创建NSArray实例。相反,这样做:

    NSMutableArray *arrStatus = [seatsDict objectForKey:0];
    if(arrStatus == nil)
    { 
        NSMutableArray *array = [NSMutableArray array];
        array = [arrSeatsStatus copy];
        [seatsDict setObject:array forKey:[NSString stringWithFormat:@"%d",i]];
        i++;
        [arrSeatsStatus removeAllObjects];
    }
    else{       
        NSLog(@"arrStatus:%@", arrStatus);
        [seatsDict setObject:[arrSeatsStatus copy] forKey:[NSString stringWithFormat:@"%d",i]];
        i++;
        [arrSeatsStatus removeAllObjects];
    }

现在数据已被复制,可以单独修改。如果您担心内存,则从字典中删除对象时,将释放复制对象的内存。