2014-12-10 2 views
0

Я столкнулся с вопросом «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, поэтому в чем проблема?

+0

где определено 'addEntitiesObject' и изменяет ли значение или значениегруппы? поскольку вы выполняете итерацию по группам значений, это будет проблемой. – RobP

+0

@RobP Я не определяю его. Он объявлен классом XCode в группах. Я никогда не определяю его, поскольку он может быть определен CoreData. Поэтому я понятия не имею, что это действительно делает под капотом. – rightaway717

+0

У вас есть обратная связь из группы обратно в 'value.groups'? Если это так, это вызовет вашу проблему, потому что, когда вы добавите значение в группу, значениягруппы будут мутированы – Paulw11

ответ

1

Если у вас есть обратная связь от групп обратно к value сущности, а затем добавить объект в группу изменит value.groups свойства - что приведет к вашей ошибке в качестве внешней петли перечисляя value.groups.

Либо удалите обратную связь, либо если вам нужно сохранить ее, скопируйте свойство value.groups и перечислите копию.

Смежные вопросы