сортировка данных типа NSSet отношения ко многим с использованием NSSortDescriptor

Учитывая следующую модель данных:

entity:                            entity:
- Order                            - Product
attribute:                         attribute: 
- date                             - productName
- orderName
relationship:                      relationship: 
- products  <<—- many-to-many —->> - orders

Я хочу отображать все продукты, отсортированные по дате заказа, а в случае большого количества заказов, связанных с одним продуктом, по дате самого раннего заказа. Все товары без заказов должны отображаться последними.

Я не понимаю, как это сделать с помощью NSSortDescriptor. По-видимому, я мог получить все данные о продуктах, преобразовать заказ (который имеет тип NSSet), чтобы определить самую старую дату, а затем отсортировать продукты по дате заказа. Хотя мне не удалось заставить это работать таким образом, он также не будет работать с NSFetchedResultsController для отображения продуктов в UITableView и, вероятно, очень неэффективен.

Как я мог бы сделать эту сортировку более эффективным способом, если бы это можно было сделать и с помощью SQL? И если необходимо, как следует изменить NSFetchedResultsController? Что-то вроде следующего кода:

let fetchRequest = NSFetchRequest(entityName: “Product”)
let sortDescriptor1 = NSSortDescriptor(key: “product.order.date … ????”, descending: 
let sortDescriptor2 = NSSortDescriptor(key: “product WITHOUT order … ????”, descending: 

fetchRequest.predicate = NSPredicate(format: “productName contains[cd] %@", “A”)
fetchRequest.sortDescriptors = [sortDescriptor1,sortDescriptor2]

let fetchedResultController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)

Получение данных в cellForRowAtIndexPath

let product = fetchedResultController.objectAtIndexPath(indexPath) as! Product

person Gerard    schedule 12.12.2015    source источник


Ответы (1)


Похоже, что просто невозможно отсортировать сущность на основе атрибутов (типа NSSet) другой сущности. Причина в том, что FRC отслеживает только одну сущность за раз, предотвращая более сложную сортировку.

В настоящее время я переключился с Core Data на Realm, и проблема была легко решена (среди нескольких других проблем, от которых я мог избавиться).

person Gerard    schedule 23.05.2016