还有一个“被列举时突变”的问题

时间:2014-12-10 06:09:52

标签: 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元素的循环中时没有使用{{1}},所以这里有什么问题?

1 个答案:

答案 0 :(得分:1)

如果从组返回到value实体的反向关系,则将实体添加到组将修改value.groups属性 - 这会导致您的错误,因为您的外部循环正在枚举{ {1}}。

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