我正在尝试在数组中添加值并将该数组存储在字典中。实际上,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,但字典不是。以上代码没有给出期望的结果。当数组清除时,上面的代码使字典为空。 请指导以上。
答案 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];
}
现在数据已被复制,可以单独修改。如果您担心内存,则从字典中删除对象时,将释放复制对象的内存。