Я испытываю некоторые затруднения из-за базовых данных / NSFetchedResultsController. Я не совсем уверен, где ошибка состоит в том, поскольку сообщение довольно неопределенно.
У меня есть проблема со вставкой больше чем одного объекта, когда выбранный контроллер результатов не имеет никаких выбранных объектов. Следующий код откажет со следующей ошибкой, если я попытаюсь уже вставить несколько объектов ни с одним выбранным. Это не отказывает, если я использую его для вставки одного объекта, и это не отказывает, если уже существуют выбранные объекты.
Катастрофический отказ происходит на сохранении: метод. заголовки в NSArray и в этом примере это содержит 5 строк.
Серьезная ошибка приложения. Исключение было поймано во время Базовой обработки изменения Данных: * - [NSCFArray objectAtIndex:]: индекс (4) вне границ (1) с userInfo (пустой указатель) * Завершающееся приложение из-за неперехваченного исключения 'NSRangeException', причина: '*** - [NSCFArray objectAtIndex:]: индекс (4) вне границ (1)'
NSEnumerator *titleEnumerator = [titles objectEnumerator];
NSString *title;
NSMutableArray *tasks = [NSMutableArray array];
Todo *todo;
while(title = [titleEnumerator nextObject])
{
todo = (Todo *)[NSEntityDescription insertNewObjectForEntityForName:@"Todo" inManagedObjectContext:managedObjectContext];
todo.title = title;
todo.state = [NSNumber numberWithInteger:TodoStateIncomplete];
todo.priority = [NSNumber numberWithInteger:TodoPriorityNormal];
todo.timeStamp = [NSDate date];
todo.dueDate = [NSDate distantFuture];
}
NSError *error;
if(![managedObjectContext save:&error])
{
NSLog(@"Unresolved error %@ %@", error, [error userInfo]);
abort();
}
Вот совет Маркуса Зарры (автора книги Core Data book):
Ошибка Core Data при удалении строки в tableView
"Попробуйте взломать объектную_исключение_бросить и посмотрите, какой метод выбрасывает исключение. Это должно помочь отследить его"
.Я знаю, что это вряд ли ответ, но так как авария происходит на save: и я помню, что у меня была странная ошибка с этим однажды... Ошибка, которая у меня была, исправлена таким образом, думаю, стоит попробовать.
Итак, при этом попробуйте изменить
NSError *error;
на
NSError *error = nil;
Подобные ошибки при сохранении основных данных при использовании iPhone SDK обычно указывают на ошибку в методах делегирования NSFetchedResultsController. В частности, один из примеров кода от Apple является некорректным и часто приводит к такой ошибке. Я бы посоветовал взглянуть на методы делегатов и сравнить их с последними примерами кода, так как вы можете обнаружить, что Apple обновила код примера в документации, и если вы повторно скопируете их код, эта ошибка может исчезнуть.
Надеюсь, это поможет.