无法更新嵌套的NSMutableDictionary

我在更新嵌套结构中的对象时遇到问题。 我有一个

NSMutableDictionary 

包含多个nsmutableDictionaries,而在另一种情况下,对于上一级中的每个人都有一个额外的nsmutableDictionaries级别。

这些是可变类型,所以我只是假设setObject:ForKey:会正常工作。 出于某种原因,当结构嵌套时,如果尝试更新单个内部级别字典,它会覆盖此级别上的所有对象值以用于任何字典。

我已经尝试了很多东西,从解析出这些值并尝试重新插入到删除键的对象,但似乎没有任何工作。

任何帮助,将不胜感激。

这里是我的代码:我有一个textfield和segmentedControl建立与几个索引的演示,选择哪一个是它用来保存/更新对象的索引。 我正在使用NSNumber的密钥。

更新:

//viewDidLoad

self.content = [NSMutableDictionary new];
self.contentContainer = [NSMutableDictionary new];


- (IBAction)like_unlike:(id)sender {
  BOOL isLiked = [self.textField.text boolValue];

  NSLog(@"isLiked - %d", isLiked ? YES : NO);

  NSNumber *nsIsLiked = [NSNumber numberWithBool:isLiked];

  NSLog(@"nsIsLiked - %@", nsIsLiked);


  [self.content setObject:nsIsLiked forKey:@"updatedIsLiked"];


  [self.contentContainer setObject:self.content forKey:[NSNumber numberWithInteger:self.segment.selectedSegmentIndex]];

}

NSLog(@"COMPLETE DIC - %@", self.contentContainer);

}

这是输出。 我保存了3个值。 索引0,2和4。

2014-11-08 11:45:41.855 DictionariesNested[1039:125297] isLiked - 1
2014-11-08 11:45:41.855 DictionariesNested[1039:125297] nsIsLiked - 1
2014-11-08 11:45:41.855 DictionariesNested[1039:125297] COMPLETE DIC - {
0 =     {
    updatedIsLiked = 1;
};
}
2014-11-08 11:45:43.623 DictionariesNested[1039:125297] isLiked - 1
2014-11-08 11:45:43.623 DictionariesNested[1039:125297] nsIsLiked - 1
2014-11-08 11:45:43.623 DictionariesNested[1039:125297] COMPLETE DIC - {
0 =     {
    updatedIsLiked = 1;
};
2 =     {
    updatedIsLiked = 1;
};
}
2014-11-08 11:45:45.018 DictionariesNested[1039:125297] isLiked - 1
2014-11-08 11:45:45.018 DictionariesNested[1039:125297] nsIsLiked - 1
2014-11-08 11:45:45.018 DictionariesNested[1039:125297] COMPLETE DIC - {
0 =     {
    updatedIsLiked = 1;
};
4 =     {
    updatedIsLiked = 1;
};
2 =     {
    updatedIsLiked = 1;
};
}

然后,在将索引0更新为false时,所有值都更改为0。

2014-11-08 11:48:01.161 DictionariesNested[1188:161731] isLiked - 0
2014-11-08 11:48:01.161 DictionariesNested[1188:161731] nsIsLiked - 0
2014-11-08 11:48:01.162 DictionariesNested[1188:161731] COMPLETE DIC - {
0 =     {
    updatedIsLiked = 0;
};
4 =     {
    updatedIsLiked = 0;
};
2 =     {
    updatedIsLiked = 0;
};
}

编辑:我重写我的答案,因为你更新你的问题

当你在做self.contentContainer setObject: ,你每次存储的是相同的字典,而不是特定的字段。 所以,如果你改变一个,所有的都会改变,因为它是同一个实例。 为了每个段都有一个字典,如果它不存在,你必须实例化一个新字典。

为了解决你的问题,你必须为每个段实例化一个NSMutableDictionary 。 像这样的东西应该工作:

NSMutableDictionary *content = [self.contentContainer objectForKey:self.segment.selectedSegmentIndex];
if (!content) {
    content = [[NSMutableDictionary alloc] init];
    [content setObject:nsIsLiked forKey:@"updatedIsLiked"];
}
[self.contentContainer setObject:content forKey:[NSNumber numberWithInteger:self.segment.selectedSegmentIndex]];
链接地址: http://www.djcxy.com/p/47347.html

上一篇: Trouble updating nested NSMutableDictionary

下一篇: Should I use will/didSetValueForKey inside a custom setter?