Я столкнулся с вопросом «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
, поэтому в чем проблема?
где определено 'addEntitiesObject' и изменяет ли значение или значениегруппы? поскольку вы выполняете итерацию по группам значений, это будет проблемой. – RobP
@RobP Я не определяю его. Он объявлен классом XCode в группах. Я никогда не определяю его, поскольку он может быть определен CoreData. Поэтому я понятия не имею, что это действительно делает под капотом. – rightaway717
У вас есть обратная связь из группы обратно в 'value.groups'? Если это так, это вызовет вашу проблему, потому что, когда вы добавите значение в группу, значениягруппы будут мутированы – Paulw11