0

我正在尝试在数组中添加值并将该数组存储在字典中。实际上, 中有部分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,但字典不是。上面的代码没有给出想要的结果。上面的代码在数组清除时使字典为空。请指导以上。

4

1 回答 1

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];
    }

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

于 2013-06-03T05:48:19.053 回答