У меня проблемы с моей базой данных coredata sqlite, в которой размещена книжная БД.После сбоя пользователь сталкивается с проблемой, состоящей в том, что данные больше не отображаются должным образом в его / ее табличном представлении.
Это связано с тем, что метод executeFetch возвращает ошибку:
[NSFetchedResultsController deleteCacheWithName:nil];
if (![[self fetchedResultsController] performFetch:&error]) {
//NSArray *array = [[self fetchedResultsController] fetchedObjects];
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
#ifdef DEBUG
abort();
#endif
}
, что приводит к появлению этого сообщения об ошибке:
Неразрешенная ошибка Error Domain = NSCocoaErrorDomain Code = 134060 "Операция не может быть завершена. (Ошибка Какао 134060.)" UserInfo = 0x1dff80 {reason =Выбранный объект с индексом 312 имеет имя секции не по порядку 'Z.Объекты должны быть отсортированы по имени раздела '}, {reason = "Выбранный объект по индексу 312 имеет не по порядку имя раздела' Z. Объекты должны быть отсортированы по имени раздела '";
Когда у меня естьзагляните в файл sqlite с помощью «SQLite Database Browser 2.0 b1», атрибуты каждой сущности выглядят нормально.
Когда я удаляю некоторые из упомянутых сущностей, все снова работает нормально.
Iхотел бы узнать, как я могу выяснить, что именно не так с упомянутыми объектами, и исправить это, чтобы пользователь мог снова использовать свои данные.Конечно, я хочу исправить ошибку, которая также приводит к искажению БД, но это не в фокусе в этом посте.
Есть ли у кого-нибудь какие-либо подсказки, где я мог бы посмотреть или что могло быть искажено в моемБД или что такое "имя секции не в порядке"?
Это код для моего fetchedResultsController:
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity;
entity = [NSEntityDescription entityForName:@"Book" inManagedObjectContext:[[GlobalData sharedInstance] managedObjectContext]];
[fetchRequest setEntity:entity];
// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:10];
//set searchPredicate
NSPredicate *predicate = nil;
if (self.bibList != nil) {
predicate = [NSPredicate predicateWithFormat:@"ANY BibLists.name LIKE %@", self.bibList.name];
}
if (predicate) {
[fetchRequest setPredicate:predicate];
}
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor;
NSString *sortDescriptorString = nil;
sortDescriptorString = @"title";
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortDescriptorString ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSString *sectionNameKeyPath = nil;
sectionNameKeyPath = @"uppercaseFirstLetterOfTitle";
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController;
aFetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:[[GlobalData sharedInstance] managedObjectContext]
sectionNameKeyPath:sectionNameKeyPath
cacheName:@"Bibliography"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
return fetchedResultsController;
}
Спасибо, b00tsy