使用NSSortDescriptor对多对多关系类型NSSet的数据进行排序

时间:2015-12-12 20:49:03

标签: swift uitableview sorting nsfetchedresultscontroller 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

1 个答案:

答案 0 :(得分:0)

似乎无法根据另一个实体的属性(类型为NSSet)对实体进行排序。原因是FRC只监视一个实体,防止更复杂的排序。

目前,我从Core Data切换到Realm,问题很容易解决(在我可以摆脱的其他几个问题中)。