我遇到了“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}},所以这里有什么问题?
答案 0 :(得分:1)
如果从组返回到value
实体的反向关系,则将实体添加到组将修改value.groups
属性 - 这会导致您的错误,因为您的外部循环正在枚举{ {1}}。
删除反向关系,或者如果需要保留它,请复制value.groups
属性并枚举副本。