I faced "Collection <_NSFaultingMutableSet: 0x7fac9c011190> was mutated while being enumerated
" issue.
I know what it means, I found it on SO. I spotted the line which causes this exception. But I still can't get what exactly I'm mutating here. Could you please help me figure that out?
- (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];
}
}
The method addEntitiesObject
that causes a problem is generated by XCode with "Create NSManagedObject subclass...
". I never define it.
Method "createGroup" only inserts new Group in CoreData with
Group* group = (Group*)[NSEntityDescription insertNewObjectForEntityForName:@"Group" inManagedObjectContext:self.managedObjectContext];
and returns the group.
So my point is that I'm not using groupToAddObjectTo
while it is in the loop where it is assigned to an element of NSSet
, so what's the problem here?
If you have an inverse relationship from groups back to the
value
entity, then adding the entity to a group will modify thevalue.groups
property - which will cause your error as your outer loop is enumeratingvalue.groups
.Either remove the inverse relationship, or if you need to keep it, copy the
value.groups
property and enumerate the copy.