NSFetchRequest / NSFetchedResultsController, возвращающий отдельное свойство, отличное, но отсортированное с использованием другого атрибута объекта

Я использую NSFetchedResultsController для отображения данных в таблице. Хранилище данных содержит множество строк, которые имеют groupIDи несколько объектов могут совместно использовать groupID,

У каждой сущности также есть свойство даты вставки.

Я хотел бы получить список различных groupID упорядочено по дате вставки свойства. Следующий код работает, за исключением того, что он не отсортирован по свойству даты вставки. Я предполагаю, что, поскольку это свойство не является одним из извлекаемых, оно не доступно для сортировки.

И я использую MagicalRecord, fwiw.

Есть ли способ использовать другие свойства объекта для сортировки, но не использовать их как часть результата? Добавление даты вставки в извлеченные свойства делает явным излишним, так как все даты уникальны, как они есть.

     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userID like[c] %@", THEUSERUSERID];

     NSFetchRequest *fetchRequest = [AnEntity MR_requestAllWithPredicate:predicate];
     [fetchRequest setReturnsDistinctResults:YES];
     [fetchRequest setResultType:NSDictionaryResultType];
     [fetchRequest setPropertiesToFetch:@[@"groupID"]];

     NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"inDate" ascending:NO];

     [fetchRequest setSortDescriptors:@[sortDescriptor]];

     _frController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[NSManagedObjectContext MR_rootSavingContext] sectionNameKeyPath:nil cacheName:nil];

1 ответ

Решение

Чедбаг... У меня была такая же проблема. Я исследовал setPropertiesToFetch и обнаружил, что для него требуется NSArray NSPropertyDescription... а не только имя атрибута.

Я думаю, если вы удалите это:

[fetchRequest setPropertiesToFetch:@[@"groupID"]];

и ДОБАВИТЬ это:

NSDictionary *entityProperties = [entity propertiesByName];
NSPropertyDescription *propDescription = [entityProperties objectForKey:@"groupID"];
NSArray *propArray = [NSArray arrayWithObject:propDescription];
[fetchRequest setPropertiesToFetch:propArray];

Это должно сработать для вас... это сработало для меня!

Другие вопросы по тегам