NSMutableDictionary 赋值
NSMutableDictionary assignment
面临 NSMutableDictionary
、
的问题
我有一个主要的可变字典,它是 dictMain
,
取另一个可变字典,即dictSubMain
,
在ViewController.m文件中声明如下,
@interface ViewController ()
{
NSMutableDictionary *dictMain;
NSMutableDictionary *dictSubMain;
}
现在我有一些值 dictMain
最初来自 viewDidLoad 方法。
我有另一种方法,首先我将 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];
}
谁能帮我解决一下!提前致谢。
试试这个:
@property(nonatomic, copy) NSMutableDictionary *dictMain;
@property(nonatomic, copy) NSMutableDictionary *dictSubMain;
实际上,无论何时使用 NSMutable*
样式,都使用 copy
关键字,这就是它存在的原因。
或更改:
dictSubMain = [[NSMutableDictionary alloc] initWithDictionary:dictMain];
至:
dictSubMain = [[NSMutableDictionary alloc] initWithDictionary:dictMain copyItems:YES];
看起来 dictSubMain[kDATA]
是一个可变字典数组。您可能遇到了问题,因为 [[NSMutableDictionary alloc] initWithDictionary:dictMain]
创建了 dictMain
的浅表副本,因此 dictSubMain
在 kDATA
包含与 dictMain
相同的数组实例。
您需要改为执行深拷贝。这样做的方法很容易搜索到。我相信 SO 上有很多答案。
面临 NSMutableDictionary
、
我有一个主要的可变字典,它是 dictMain
,
取另一个可变字典,即dictSubMain
,
在ViewController.m文件中声明如下,
@interface ViewController ()
{
NSMutableDictionary *dictMain;
NSMutableDictionary *dictSubMain;
}
现在我有一些值 dictMain
最初来自 viewDidLoad 方法。
我有另一种方法,首先我将 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];
}
谁能帮我解决一下!提前致谢。
试试这个:
@property(nonatomic, copy) NSMutableDictionary *dictMain;
@property(nonatomic, copy) NSMutableDictionary *dictSubMain;
实际上,无论何时使用 NSMutable*
样式,都使用 copy
关键字,这就是它存在的原因。
或更改:
dictSubMain = [[NSMutableDictionary alloc] initWithDictionary:dictMain];
至:
dictSubMain = [[NSMutableDictionary alloc] initWithDictionary:dictMain copyItems:YES];
看起来 dictSubMain[kDATA]
是一个可变字典数组。您可能遇到了问题,因为 [[NSMutableDictionary alloc] initWithDictionary:dictMain]
创建了 dictMain
的浅表副本,因此 dictSubMain
在 kDATA
包含与 dictMain
相同的数组实例。
您需要改为执行深拷贝。这样做的方法很容易搜索到。我相信 SO 上有很多答案。