在myClass.h中,我有
@property (copy, atomic) NSMutableDictionary *thisParticularWordList;
在myClass.m中,我按如下方式填充thisParticularWordList:
theSubview.thisParticularWordList = [NSMutableDictionary dictionaryWithDictionary: someDictionary];
在xcode的变量视图中,我看到,该实例的属性确实已填充。
在我的代码中,我尝试这样做:
[self.thisParticularWordList removeObjectForKey:self.theKey];
但不知何故,self.thisParticularWordList变成了一个不可变的NSDictionary。
我做错了什么?
答案 0 :(得分:5)
这是因为您的财产的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];
答案 1 :(得分:0)
你需要担心这个特定的界限:
sed '1~2{s/\S\+/-&/g;s/--//g}' file
因为该属性的 setter 会复制您的可变集合并使其成为不可变之一;这就是为什么你以后会崩溃的原因。
您可能需要考虑仅保留强引用而不是复制它,例如:
@property (copy, atomic) NSMutableDictionary * thisParticularWordList;