Попытка основать другой массив на [NSFetchedResultController fetchedObjects]
опасна, потому что выбранный контроллер результатов всегда автоматически обновляется.Ваша проблема вызвана этим циклом:
for (int i=0; i<[self.selectedEvents count]; i++) {
CustomDictionary *dic=[selectedEvents objectAtIndex:i];
if (dic.isSelected) {
Event *evt=[fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
[array addObject:evt];
}
}
... повторяется дважды, когда у вас есть только один объект, возвращаемый [NSFetchedResultController objectAtIndexPath:]
.Вероятно, это вызвано тем, что selectedEvents
устанавливается, когда fetchedObjects
имеет два или более элементов, а затем один удаляется без обновления selectedEvents
для нового счетчика.Когда вы пытаетесь перебрать строки, вы идете хотя бы на один шаг и получаете исключение.
Изменение цикла for для индексации непосредственно на fetchedObjects
:
for (int i=0; i<[[fetchedResultsController fetchedObjects] count]; i++)
... решит непосредственную проблему, но ваш код всегда будет хрупким, если вы полагаетесь на попытку синхронизациимассив selectedEvents
с контроллером полученных результатов.