ios - 又一个 "Mutated while being enumerated"问题

标签 ios objective-c fast-enumeration

我遇到了“Collection <_NSFaultingMutableSet: 0x7fac9c011190> was mutated while being enumerated”问题。

我知道这意味着什么,我在 SO 上找到了它。我发现了导致此异常的行。但我仍然不知道我在这里变异的到底是什么。你能帮我解决这个问题吗?

- (void)addEntitiesObject:(Entity *)value {
    for (Group* group in value.groups) {
        Group* groupToAddObjectTo = nil;
        for (Group* tabGroup in self.tab.groups) {
            if (group.title == tabGroup.title) {
                groupToAddObjectTo = tabGroup;
            }
        }
        if (!groupToAddObjectTo)
            groupToAddObjectTo = [self.fetchController createGroup];

        groupToAddObjectTo.title = group.title;
        [groupToAddObjectTo addEntitiesObject:value]; //THIS LINE IS A TROUBLE
        [self.tab addGroupsObject:groupToAddObjectTo];
    }
}

方法addEntitiesObject导致问题的是 XCode 使用“Create NSManagedObject subclass...”生成的。我从不定义它。

方法“createGroup”仅在 CoreData 中插入新组

    Group* group = (Group*)[NSEntityDescription insertNewObjectForEntityForName:@"Group" inManagedObjectContext:self.managedObjectContext];

并返回组。

所以我的观点是我没有使用 groupToAddObjectTo当它在循环中时,它被分配给 NSSet 的元素。 ,那么这里有什么问题呢?

最佳答案

如果从组到 value 实体存在反向关系,那么将实体添加到组将修改 value.groups 属性 - 这将导致您错误,因为您的外循环正在枚举 value.groups

要么删除反向关系,要么如果需要保留它,请复制 value.groups 属性并枚举副本。

关于ios - 又一个 "Mutated while being enumerated"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27394327/

相关文章:

ios - 更改默认值 "Not Selected"UITabBarItem 图像颜色

ios - 没有调用目标为 nil 的 UIButton 函数?

iphone - Objective c "for each"(快速枚举)——集合评价?

ios - 在 UITextField 中检测退格事件

ios - 来自 dataWithContentsofURL 的 NSData 具有特定的键/值对 null

ios - 为 'CONTAINED_BY' 文本查询编写一个 NSPredicate

objective-c - 重新加载 UICollectionView 导致闪烁

objective-c - 尝试通过快速枚举 NSMutableArray 将 UILabel 动态添加到 View

objective-c - 为什么循环后循环变量变成 `nil`

ios - 即使在运行时设置 UIImage,如何在 UIImageView 上做弯角?