无法更新嵌套的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?