首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSMutableDictionary分配

NSMutableDictionary分配
EN

Stack Overflow用户
提问于 2016-08-08 15:17:04
回答 2查看 242关注 0票数 0

面对NSMutableDictionary的问题,

我有一个主要的可变字典,它是dictMain

使用另一个可变字典,即dictSubMain

声明如下,在ViewController.m文件中,

代码语言:javascript
复制
@interface ViewController ()
{
    NSMutableDictionary *dictMain;
    NSMutableDictionary *dictSubMain;
}

现在,我有一些最初来自viewDidLoad方法的值填充到dictMain中。

我有另一种方法,首先我将dictMain赋值给另一个可变字典dictSubMain,然后我在dictSubMain中做了一些更改,但问题是无论我在dictSubMain中做什么更改,同样的更改也会反映在dictMain上。我不想在dictMain中做任何更改。

下面是我的代码,

代码语言:javascript
复制
-(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];
}

有人能帮我解决这个问题吗?提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-08 15:25:15

看起来dictSubMain[kDATA]是一个可变字典的数组。您可能遇到了问题,因为[[NSMutableDictionary alloc] initWithDictionary:dictMain]创建了dictMain的浅层副本,因此dictSubMainkDATA中包含与dictMain相同的数组实例。

相反,您需要执行深度复制。这样做的方法很容易搜索到。我相信在这个网站上有很多答案。

票数 1
EN

Stack Overflow用户

发布于 2016-08-08 15:25:12

试试这个:

代码语言:javascript
复制
@property(nonatomic, copy) NSMutableDictionary *dictMain;
@property(nonatomic, copy) NSMutableDictionary *dictSubMain;

实际上,无论何时使用NSMutable*样式,都要使用copy关键字,这就是它存在的原因。

或者改变:

代码语言:javascript
复制
dictSubMain = [[NSMutableDictionary alloc] initWithDictionary:dictMain];

至:

代码语言:javascript
复制
dictSubMain = [[NSMutableDictionary alloc] initWithDictionary:dictMain copyItems:YES];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38823301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档