newGroups = [NSMutableString stringWithString:[newGroups substringToIndex:[newGroups length] - 1]];
Эта строка генерирует утечку, а затем является причиной сбоя.
После того, как это выполнится, у вас больше нет ссылки на вашу изменяемую строку alloc / inited, и у вас есть автоматически освобожденная строка,Поэтому вызов release для этой строки вызывает двойное освобождение где-то.
EDIT: с решением
Самое простое решение: не добавлять последний ','.
for (int i = 0; i < [self.isInGroupArr count]; i++) {
if ([[self.isInGroupArr objectAtIndex:i] boolValue] == YES) {
[newGroups appendString:[[AppDelegate arrayGroups] objectAtIndex:i]];
if (i != ([self.isInGroupArr count] - 1))
[newGroups appendString:@","];
}
}
Notочень элегантный, но довольно эффективный (хотя можно было бы избежать подсчета каждый раз).