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 的浅表副本,因此 dictSubMainkDATA 包含与 dictMain 相同的数组实例。

您需要改为执行深拷贝。这样做的方法很容易搜索到。我相信 SO 上有很多答案。