До недавнего времени я использовал Core Data с In-Memory store для своего проекта.Теперь я пытаюсь переключиться на хранилище SQLite и сталкиваюсь со следующей проблемой:
При попытке извлечь объекты из хранилища с использованием предиката и sortDescriptor мой fetchedResultsController возвращает 0 объектов.Тот же самый код прекрасно работает, когда тип хранилища находится в памяти.
Вот как я делаю выборку:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY %K == %@", @"categories", category];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES selector:@selector(caseInsensitiveCompare:)];
self.fetchedResultsController = [self createFetchedResultsControllerWithEntityName : @"Provider" sectionName : @"group" sortDescriptor : sortDescriptor predicate : predicate cache : nil];
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[self.tableView reloadData];
и здесь я создаю запрос на выборку:
- (NSFetchedResultsController *)createFetchedResultsControllerWithEntityName : (NSString*) entityName sectionName : (NSString*) sectionName sortDescriptor : (NSSortDescriptor*) sortDescriptor predicate : (NSPredicate*) predicate cache : (NSString*) cacheName{
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
//set predicate
if (predicate)
[fetchRequest setPredicate:predicate];
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:sectionName
cacheName:cacheName];
aFetchedResultsController.delegate = self;
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
return [aFetchedResultsController autorelease];
}
Опять же, этот же код извлекает много объектов при использовании хранилища в памяти, но пустой массив fetchedObjects при использовании SQLite.
Я прочитал документацию Apple относительно особых соображений, которые следует учитывать при использовании предикатов и sortDescritors с хранилищем SQLite.Я использую в предикате одно (многие) отношение ко многим (категориям), так что это должно быть хорошо?
Нет ошибок, возвращаемых из выборки.Просто нет объектов (fetchedResultsController.fetchedObjects пусто).
Любое руководство будет с благодарностью.
Спасибо