У меня есть следующая модель данных:
После открытия документа я бы хотел перечислить слои (как разделы) с базовыми объектами в UITableView
.
Я реализовал полученный контроллер результатов следующим образом:
- (NSFetchedResultsController *)fetchedResultsController
{
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
// Create the fetch request for the entity
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"DB_Layer"
inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
// Set the batch size
[fetchRequest setFetchBatchSize:10];
// Sort by stacking order, descending
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"stackingOrder" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Create the fetched results controller, and set this controller to be the delegate
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:nil cacheName:@"Layer"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
// Fetch the results into the fetched results controller
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return fetchedResultsController;
}
Проблема в том, что это дает мне список всех слоев (даже тех, которые принадлежат другим документам).
Я считаю, что я должен использовать NSPredicate
, чтобы сузить результаты, но я не уверен, как.
Что мне нужно, это:
- список, организованный в разделы по
DB_Layer
объектам (я не уверен, где я могу указать, по чему можно группировать результаты)
- каждый раздел, содержащий объекты / группы соответствующего слоя.
EDIT:
Основываясь на ответе Ричарда Кейси, я теперь могу получить список слоев, но он требует, чтобы я извлек все DB_Shape
объектов (даже принадлежащих другим документам) и отфильтровал их с помощью предикатов.
Это большой успех производительности.
То, что я действительно ищу, это способ сделать это наоборот:
- передать текущий документ в
NSFetchedResultsController
,
- извлечение связанных объектов, создание раздела для каждого
DB_Layer
объект,
- список соответствующих - либо сгруппированных (
DB_Group
), либо отдельных
(DB_Shape
) объекты в разделе.