我有一个如下所示的数据模型:
正如你所看到的,这是一种多对多的关系。在我的主视图控制器中,我正在获取所有标记对象,如下所示:
let tagFetchRequest =
NSFetchRequest<NSManagedObject>(entityName: "Tag")
//3
tagFetchRequest.predicate = NSPredicate(format: "self.posts.@count != 0")
//let sort = NSSortDescriptor(key: "posts.first?.timestamp", ascending: false). This line is the issue
tagFetchRequest.sortDescriptors = [sort]
fetchedResultsController = NSFetchedResultsController(fetchRequest: tagFetchRequest, managedObjectContext: managedContext, sectionNameKeyPath: nil, cacheName: nil) as? NSFetchedResultsController<Tag>
fetchedResultsController.delegate = self
do {
try fetchedResultsController.performFetch()
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
我想让标签显示出来,这样谁的帖子的标签有最新的时间戳显示在第一位。由于post s是一个有序集,我想如果我能得到有序集的时间戳中的第一个post并对其上的标记进行排序,那就行了。但nssortdescriptor密钥语言似乎并不接受“self.posts.first”这样的东西。
另一个选项是-对于每个获取的标记执行其post的额外获取,然后以编程方式对这些进行排序,并以某种方式返回此排序的最新时间戳的值,并将其交给nsfetchedresultscontroller。我不知道你是否能做到这一点-你会在哪里执行这个额外的获取甚至?你能把这样的东西传给nssortdescriptor吗?