快速列举中的突变?

use*_*mho 2 iphone cocoa-touch objective-c ios

实际上我收到了一个奇怪的例外:我迭代一个MutableDictionary并想在其中设置一个新值:

    selectionIndex = [NSMutableDictionary dictionaryWithDictionary:selection];
    NSString *whatever = @"999999";
    id keys;
    NSEnumerator *keyEnum = [selectionIndex keyEnumerator];

    while (keys = [keyEnum nextObject]) 
    {
        [selectionIndex setObject:whatever forKey:keys];
    }
Run Code Online (Sandbox Code Playgroud)

顺便说一下,传递给这个方法的选择是一个MutableDictionary.如果我运行此代码,我收到以下异常:

2011-12-05 15:28:05.993 lovelini [1333:207] *由于未捕获的异常'NSGenericException'终止应用程序,原因:'* Collection <__ NSCFDictionary:0x6a33ed0>在枚举时发生了变异.{type = mutable dict,count = 8,entries => 0:{contents =

好吧,我知道我不能改变NSDictionary,但据我所知,我不知道!那么为什么我会得到这个例外呢?这是快速枚举的限制吗?据我所知,无法在Fast Enumeration中添加或删除条目,但我不添加或删除任何内容?!

omz*_*omz 9

枚举时,您无法对集合进行任何更改.您可以改为枚举字典的键而不是字典本身:

for (NSString *key in selectionIndex.allKeys) {
    [selectionIndex setObject:whatever forKey:key];
}
Run Code Online (Sandbox Code Playgroud)