我有以下陈述
[[myListSet objectAtIndex:sender.tag] setValue:@"1" forKey:@"STATUS"];
其中myListSet定义为
NSMutableOrderedSet *myListSet;
myListSet是一个字典条目列表,每个条目都有6个键值对,其中一个键是STATUS。
我以为我可以使用上面的行更新其中一个词典中的值。它在模拟器中工作,但不在我的iPhone上。
我得到的错误是 ***由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:' - [__ NSCFDictionary setObject:forKey:]:发送到不可变对象的变异方法'
我想我更新条目的想法是不正确的。关于如何更新此集合中某个字典条目的某个键值的任何想法?
答案 0 :(得分:2)
NSMutableOrderedSet
允许您修改其直接子项。您看到的错误是因为您的NSMutableOrderedSet
包含NSDictionary
个对象,而不是NSMutableDictionary
个对象。
为了修改子词典,您需要将它们作为NSMutableDictionary
个对象。你可以这样做:
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[myListSet objectAtIndex:sender.tag]];
dict[@"STATUS"] = @"1";
[myListSet replaceObjectAtIndex:sender.tag withObject:dict];
你应该知道,任何持有对原始不可变字典的引用的东西仍将持有该字典,而不是你修改过的字典。
答案 1 :(得分:0)
setValue:forKey使用键值编码,可以设置对象的属性。 NSMutableOrderedSet没有附带" STATUS"物业开箱即用。
您想使用setObject:forKey而不是
答案 2 :(得分:0)
我相信你的数据结构是一组NSDictionary。你的集合是可变的,但其中的字典是不可变的。
如果您可以访问该字典,那么将NSDictionary更改为NSMutableDictionary,这将有效。如果不是那么
NSDictionary *myDictionary = [myListSet objectAtIndex:sender.tag]; NSDictionary *myMutableDictionary = [myDictionary mutableCopy]; [myMutableDictionary setValue:@"1" forKey:@"STATUS"]; [myListSet setObject:myMutableDictionary atIndex:sender.tag]