Извлечение основных данных для просмотра таблицы на iPhone - PullRequest
0 голосов
/ 24 апреля 2010

Я следовал учебному пособию по основным данным на сайте разработчиков Apple , и все хорошо, пока мне не нужно что-то добавить в извлеченный магазин. Я получаю эту ошибку после успешной сборки и загрузки при попытке добавить новый элемент в список:

Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Неверное обновление: недопустимое количество строк в разделе 0. Число строк, содержащихся в существующем разделе после обновления (0), должно быть равно количеству строк содержится в этом разделе перед обновлением (0), плюс или минус количество строк, вставленных или удаленных из этого раздела (1 добавлено, 0 удалено).

Из-за того, что выборка проходит нормально, и что если я заменю выборку на eventList = [[NSMutableArray alloc] init], она будет работать, как и ожидалось (без настойчивости, конечно), я склонен полагать, что проблема заключается не в создании Изменяемый массив правильно. Вот проблемная часть кода:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];

NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults = nil) {
    //Handle the error
}

[self setEventList:mutableFetchResults];
[mutableFetchResults release];
[request release];

Я попытался переключить NSArray s во втором блоке с помощью NSMutableArray s, но я все еще получаю ту же ошибку.

Для справки, фрагмент кода, который выдает ошибку, когда я пытаюсь добавить запись, находится здесь:

[eventList insertObject:event atIndex:0];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

ошибка при вызове insertRowsAtIndexPaths.

Заранее спасибо за любую помощь

- РЕДАКТИРОВАТЬ ДОБАВИТЬ -

Следует отметить, что количество строк вызывается путем возврата [eventList count]

1 Ответ

1 голос
/ 24 апреля 2010

Ну, есть опечатка на if (mutableFetchResults = nil) - она ​​должна быть ==, конечно (с этого момента все испортилось бы).

Если предположить, что проблема не в этом - синхронизировать информацию о базовых данных и массиве таблиц может быть непросто (трудно точно сказать, что не так с вашим кодом, но [eventList insertObject:event atIndex:0] выглядит вероятным виновником). Если вы собираетесь добавлять и удалять объекты, я бы рекомендовал вместо этого использовать NSFetchedResultsController - у него есть собственный набор ошибок, но это делает добавление и удаление объектов из магазина гораздо менее болезненным.

...