ios - 根据关系属性对获取请求进行排序

标签 ios core-data nsfetchrequest nssortdescriptor

假设我有两个实体; ItemLocalizedStringLocalizedString 实体有两个属性: 字符串区域设置Item 实体与称为 localizedTitlesLocalizedString 具有一对多关系。每个“区域设置”都有一个字符串实体。

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

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

最佳答案

当然你可以这样做,但你不必预先获取任何特定的语言环境。您的获取结果 Controller 将只获取 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 实体 locale 的过滤器:

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

显然,您可以使用常用的排序描述符按 string 排序。现在,要填充您的表格,您可以按照另一个方向的关系找到该项目。

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

关于ios - 根据关系属性对获取请求进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33087884/

相关文章:

ios - Flash Builder iOS 导出版本错误格式版本标签无效

ios - 在 iOS 8 自动高度的单元格内键入时,UITableView 在 endUpdates 上跳转到顶部

ios - 单击 TableView 某个部分中的任意位置后如何执行 segue?

macos - 为什么 NSFetchRequest.shouldRefreshRefetchedObjects 不起作用?

swift - 如何在 Swift 中使用 UISearchBar 和 NSFetchedResultsController 在 Core Data 上一次获取超过 1 个实体?

ios - 具有核心数据和 Restkit 的多 View Controller

ios - 为外部主键创建NSPredicate

ios - 如何从按对象创建日期排序的核心数据中获取结果?

ios - 在 Xcode 中,NSFetchRequest 只返回对象,而不是它们的属性

ios - Flutter 与 Firebase 在 IOS 上的集成错误(无法安装 pod)