更新NSMutableOrderedSet对象中的键的值

时间:2015-02-26 21:54:56

标签: ios iphone

我有以下陈述

[[myListSet objectAtIndex:sender.tag] setValue:@"1" forKey:@"STATUS"];

其中myListSet定义为

NSMutableOrderedSet *myListSet;

myListSet是一个字典条目列表,每个条目都有6个键值对,其中一个键是STATUS。

我以为我可以使用上面的行更新其中一个词典中的值。它在模拟器中工作,但不在我的iPhone上。

我得到的错误是 ***由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:' - [__ NSCFDictionary setObject:forKey:]:发送到不可变对象的变异方法'

我想我更新条目的想法是不正确的。关于如何更新此集合中某个字典条目的某个键值的任何想法?

3 个答案:

答案 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]