Учитывая следующую модель данных:
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