根据关系属性对提取请求进行排序

假设我需要实体; ItemLocalizableStringLocalizableString实体有两个属性; stringlocaleItem实体与LocalizableString具有多对多的关系,称为localizedTitles 。 每个“locale”有一个字符串实体。

现在,在我的应用程序中,我有一些上下文/设置,用于确定显示UI时要使用的locale 。 假设我有一个带有NSFetchedResultsControllerUITableViewController来处理数据流。

我的问题是:我可以根据LocalizableStringstring属性排序Item实体,其中locale是例如en ? 我可以在获取请求中执行此操作,而不是在获取所有项目后执行此操作?


当然你可以做到这一点,但你不必提前获取任何特定的区域设置。 您提取的结果控制器只会获取Item对象,然后您可以根据需要引用正确的字符串。

实现此目的的一种方法是为Item类添加一个便捷函数,如下所示

func titleWithLocale(identifier: String) -> String? {
   if let title = self.localizedTitles.filter 
         { $0.locale == identifier }
         .first as? LocalizableString {
     return title.string
   }
   return nil
}

很可能你必须调整这些代码以符合严格的Swift输入,但你明白了。

如果您需要按标题字符串进行排序,则可能需要采用不同的方法。 如果您知道每个Item在各自的区域设置中都有本地化标题,则可以使用谓词来获取LocalizedTitle实体:区域设置的筛选器:

 request.predicate = NSPredicate(format: "locale = %@", "en")

显然,你可以用通常的排序描述符按string排序。 现在,要填充表格,您可以通过沿着另一个方向的relationshp进入该项目。

 let title = fetchedResultsController.objectAtIndexPath(indexPath)!
 let item = title.item

我最终为我的LocalizableString实体做了一个获取请求。 用一个检查locale和相反关系的谓词:

NSPredicate(format: "locale == %@ AND itemName != nil", locale)

链接地址: http://www.djcxy.com/p/36151.html

上一篇: Sort fetch request based on relationship attribute

下一篇: NSFetchedResultsController on a one