答案 0 :(得分:0)
该关系被定义为一个无序的集合。您可以将该集转换为数组,然后对该数组进行排序:
NSArray* sortedEvents = [user.events.allObjects sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]]
答案 1 :(得分:0)
是的,Core Data中的托管对象没有特别的顺序。您可以通过在获取请求上设置sortDescriptors
属性来获取时对它们进行排序。如果您已经在进行提取,那么比首先获取然后在内存中进行排序更快更有效,例如,通过调用sortedArrayUsingDescriptors
。
因此,如果您要获取所有事件,您将执行以下操作:
let fetchRequest: NSFetchRequest<Event> = Event.fetchRequest()
fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(Event.name),
ascending: true)]
或者,如果您有一个名为usersWhoLiked的从事件到用户的多对多关系,您可以获取至少一个50岁以上用户喜欢的所有事件,如下所示:
let fetchRequest: NSFetchRequest<Event> = Event.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "@"SUBQUERY(usersWhoLiked, $user, $user.age > %d).@count != 0",
50))
fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(Event.name),
ascending: true)]
但请注意,sortDescriptors仅适用于获取请求的实体。而且,如果您根本没有进行提取,例如只是订购特定用户的所有事件,那么Jon Rose的解决方案可能同样有效或更高。
目前还不清楚您想要订购什么。我希望这能回答你的问题。