NSMutableDictionary 是不可变的

NSMutableDictionary is immutable

在myClass.h中,我有

@property (copy, atomic) NSMutableDictionary *thisParticularWordList;

在 myClass.m 中,我按如下方式填充 thisParticularWordList:

theSubview.thisParticularWordList = [NSMutableDictionary dictionaryWithDictionary: someDictionary];

我在 xcode 的变量视图中看到,确实填充了此实例的 属性。

在我的代码的其他地方,我尝试这样做:

[self.thisParticularWordList removeObjectForKey:self.theKey];

但不知何故,self.thisParticularWordList 变成了一个不可改变的 NSDictionary。

我做错了什么?

这是因为您的 属性 的 copy 属性。看看 this answer.

一个解决方案是制作 属性 strong 然后在分配它时,你会做 self.yourProperty = [yourDictionary mutableCopy];.

甚至 [NSMutableDictionary dictionaryWithDictionary: someDictionary]; 因为这也会创建一个新词典。


演示修复的完整代码示例:

MyClass.h

@property (strong, atomic) NSMutableDictionary *thisParticularWordList;

MyClass.m

theSubview.thisParticularWordList = [NSMutableDictionary dictionaryWithDictionary: someDictionary];

然后这将在分配后工作:

[self.thisParticularWordList removeObjectForKey:self.theKey];

你需要担心这一行:

@property (copy, atomic) NSMutableDictionary * thisParticularWordList;

因为 属性 的 setter 复制了您的可变集合并使其成为 不可变 之一;这就是为什么您稍后会崩溃的原因。


您可能需要考虑只保留强引用而不是复制它,例如:

@property (strong, atomic) NSMutableDictionary * thisParticularWordList;