获取已排序记录的问题 (CoreData)
Posted
技术标签:
【中文标题】获取已排序记录的问题 (CoreData)【英文标题】:Issue with fetching sorted records (CoreData) 【发布时间】:2014-12-31 09:02:18 【问题描述】:我有
两个实体记录和分组。
一对多的关系,所以每个组可以有多个记录。
在群组中 -> (relationship:arrRecord, Destination:record, Inverse:recordGroup)
记录中 -> (relationship:recordGroup, Destination:group, Inverse:arrRecord)
我能够获取组和相应的记录。但我无法获取按记录字段“名称”排序的组和相应记录。
代码:
let fetch: NSFetchRequest = NSFetchRequest(entityName: "group")
if let fetchGroups = APP_DELEGATE.managedObjectContext!.executeFetchRequest(fetch, error: nil) as? [group]
for group in fetchGroups
let sortDesc = NSSortDescriptor(key: "name", ascending: true)
let arrSorted = group.arrRecord.sortedArrayUsingDescriptors([sortDesc])
print("arrSorted === \(arrSorted)") // sorted by name
group.arrRecord = NSSet(array: arrSorted)
print("NSSet(array: group.arrRecord) === \(group.arrRecord)") //not sorted by name
arrSorted 正在排序,但是当转换回 NSSet 时,订单重置:(
【问题讨论】:
如果您将数组重新分配给一个集合,那么它会再次未排序。这就是集合的工作方式,它是无序的/无序的。只需使用排序后的数组即可。 集合按定义是未排序的,因此当您将结果分配给集合时,您将总是有一个未排序的集合。 【参考方案1】:“To Many”关系导致NSSet
(或NSOrderedSet
,如果您已选中“ordered”),这不是一个排序集合。
您可以使用- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors
来获得已排序的NSArray
。
【讨论】:
集合未排序,并且您的托管对象关系未定义为已排序,因此一旦将其分配回集合,您将看不到排序。只使用数组有什么问题?你想对排序后的信息做什么?以上是关于获取已排序记录的问题 (CoreData)的主要内容,如果未能解决你的问题,请参考以下文章
NSPredicate 在 CoreData 中按字母顺序获取记录
如何在 GROUP BY 之前对 Core Data 记录进行排序?
使用 Core Data 进行排序的 fetchRequest 有啥限制?