面对NSMutableDictionary的问题,
我有一个主要的可变字典,它是dictMain,
使用另一个可变字典,即dictSubMain,
声明如下,在ViewController.m文件中,
@interface ViewController ()
{
NSMutableDictionary *dictMain;
NSMutableDictionary *dictSubMain;
}现在,我有一些最初来自viewDidLoad方法的值填充到dictMain中。
我有另一种方法,首先我将dictMain赋值给另一个可变字典dictSubMain,然后我在dictSubMain中做了一些更改,但问题是无论我在dictSubMain中做什么更改,同样的更改也会反映在dictMain上。我不想在dictMain中做任何更改。
下面是我的代码,
-(void)addRowsInTable:(NSInteger)index
{
dictSubMain = [[NSMutableDictionary alloc] initWithDictionary:dictMain];
NSMutableArray *tmpArray = [[NSMutableArray alloc] init];
NSMutableDictionary *tmpDic = [[NSMutableDictionary alloc] init];
[tmpDic setObject:self.btnTTNumDent.currentTitle forKey:kNUMDENT_T];
[tmpDic setObject:self.btnTTSizeDent.currentTitle forKey:kSIZEDENT_T];
[tmpArray addObject:tmpDic];
[[[dictSubMain valueForKey:kDATA] objectAtIndex:index] setObject:tmpArray forKey:kTABLE];
}有人能帮我解决这个问题吗?提前谢谢。
发布于 2016-08-08 15:25:15
看起来dictSubMain[kDATA]是一个可变字典的数组。您可能遇到了问题,因为[[NSMutableDictionary alloc] initWithDictionary:dictMain]创建了dictMain的浅层副本,因此dictSubMain在kDATA中包含与dictMain相同的数组实例。
相反,您需要执行深度复制。这样做的方法很容易搜索到。我相信在这个网站上有很多答案。
发布于 2016-08-08 15:25:12
试试这个:
@property(nonatomic, copy) NSMutableDictionary *dictMain;
@property(nonatomic, copy) NSMutableDictionary *dictSubMain;实际上,无论何时使用NSMutable*样式,都要使用copy关键字,这就是它存在的原因。
或者改变:
dictSubMain = [[NSMutableDictionary alloc] initWithDictionary:dictMain];至:
dictSubMain = [[NSMutableDictionary alloc] initWithDictionary:dictMain copyItems:YES];https://stackoverflow.com/questions/38823301
复制相似问题