让我说我必须要实体; Item
和LocalizableString
。 LocalizableString
实体有两个属性; string
和locale
。 Item
实体与名为LocalizableString
的{{1}}具有多对多关系。每个" locale"。
现在,在我的应用程序中,我有一些上下文/设置,用于确定在显示UI时我想要使用的localizedTitles
。因此,我要说locale
UITableViewController
处理数据流。
我的问题是:我可以根据NSFetchedResultsController
的{{1}}属性对Item
个实体进行排序,例如LocalizableString
string
?我是否可以在获取请求中执行此操作,而不是在获取所有项目之后?
答案 0 :(得分:1)
当然,您可以这样做,但您不必提前获取任何特定的区域设置。您获取的结果控制器只会获取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
排序。现在,要填充表格,您可以通过跟随另一个方向的关系来获得该项目。
let title = fetchedResultsController.objectAtIndexPath(indexPath)!
let item = title.item
答案 1 :(得分:0)
我最终为我的LocalizableString
实体做了一次获取请求。使用谓词检查locale
和反向关系:
NSPredicate(format: "locale == %@ AND itemName != nil", locale)