我有一个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]).
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top