我遇到了“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
的元素。 ,那么这里有什么问题呢?
最佳答案
如果从组到 value
实体存在反向关系,那么将实体添加到组将修改 value.groups
属性 - 这将导致您错误,因为您的外循环正在枚举 value.groups
。
要么删除反向关系,要么如果需要保留它,请复制 value.groups
属性并枚举副本。
关于ios - 又一个 "Mutated while being enumerated"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27394327/