NSMutableDictionary removeObjectForKey投掷EXC_BAD_ACCESS一var这不是释放
-
20-09-2019 - |
题
我有一个plist。它有几十键,每NSMutableArray项目:
...
<key>KeyName1</key>
<array>
<string>String1</string>
<string>String2</string>
<string>String3</string>
</array>
<key>KeyName2</key>
<array>
<string>String1</string>
<string>String2</string>
<string>String3</string>
</array>
...
我们需要删除"String1"为所有的钥匙。这是我写道:
void DeleteString(NSString *StringToDelete){
NSMutableDictionary *item=nil;
item = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
for (id obj in item){
NSString *removeThisObject=(NSString *)obj;
NSArray *ObjectArray = [item objectForKey:obj];
for (int i = 0; i< [ObjectArray count]; i++){
NSString *objectString = [ObjectArray objectAtIndex:i];
if([objectString isEqualToString:StringToDelete]){
NSLog(@"Remove This from Item Dictionary: %@",removeThisObject);
[item removeObjectForKey:obj];
}
}
}
[item writeToFile:filePath atomically: YES];
[item release];
}
我想它会很容易,只是删除整个关键的,如果它包括一个价值,我不想,但这一行:[项目removeObjForKey:obj]抛出了一个EXC_BAD_ACCESS.
这没有意义因为我,我的理解是EXC_BAD_ACCESS意味着一个消息发给一个获释的方法。
在此,'的项目'不是获释,是吗?我没有误解除'item'只有几行较低。
什么在这里?是否有一个更好的方式来删除"String1"从两个钥匙吗?
谢谢。
解决方案
这不是因为 item
不是获释,但是 item
是不可改变的。
内为在循环,迭代,正在走过的不可更改。如果你这样做,该计划会引发突变枚举的例外。
你可以
- 收集所有的
obj
成独立阵列,然后-removeObjectsForKeys:
在结束循环; 或 - 迭代的副本键的项目。具体地说,
for (id obj in [item allKeys])
.
不隶属于 StackOverflow