假设我有两个实体; Item
和 LocalizedString
。 LocalizedString
实体有两个属性: 字符串
和区域设置
。 Item
实体与称为 localizedTitles
的 LocalizedString
具有一对多关系。每个“区域设置”都有一个字符串实体。
现在,在我的应用程序中,我有一些上下文/设置来确定我在显示 UI 时要使用的区域设置
。假设我有一个 UITableViewController
和一个 NSFetchedResultsController
来处理数据流。
我的问题是:我可以根据 LocalizedString
的 string
属性对 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/