NSFetchedResultsController部分已本地化排序

Ger*_*erd 7 iphone nsfetchedresultscontroller

我如何使用带有翻译排序键和sectionKeyPath的NSFetchedResultsController?

问题:我在数据库中的属性"type"中有ID,如typeA,typeB,typeC,...而不是直接值,因为它应该是本地化的.在英语中,类型A = Bird,typeB = Cat,typeC = Dog in German,它将是Vogel,Katze,Hund.

使用带有排序键的NSFetchedResultController和"type"上的sectionKeyPath,我收到订单和部分 - typeA - typeB - typeC

接下来我翻译显示,一切都很好用英语: - 鸟 - 猫 - 狗

现在我切换到德语并收到错误的排序顺序 - Vogel - Katze - Hund

因为它仍然按typeA,typeB,typeC排序

所以我正在寻找一种方法来本地化NSFetchedResultsController的排序.

我尝试了瞬态属性方法,但这对排序键不起作用,因为排序键需要在实体中.

我没有其他想法.但我不敢相信在本地化所需的派生属性上使用NSFetchedResultsController是不可能的?

有一些相关的讨论,如使用NSFetchedResultsController的自定义部分?但不同的是自定义部分名称和排序键可能具有相同的顺序.不是我的情况,这是主要的区别.

最后,我想在派生属性上需要一个必要的NSSortDescriptor排序顺序.此排序顺序还可用于sectionKeyPath.

谢谢你的任何提示.

Ger*_*erd 3

好吧,这不是一个很好的解决方案,但最终它起作用了(因为我有一个定义的有限记录集,大约 100):

初始化应用程序时:

  • 我在托管对象中创建一个“order by”属性。
    • 我检查本地化(以及排序顺序)自上次以来是否发生了变化。如果是这样:
    • 我获取所有记录并按本地化名称在 NSArray 中对它们进行排序。
    • 我写回商店里的记录

出于性能原因,我仅根据 NSPredicate 获取记录并对其进行排序。

我可以使用“order by”作为排序键和部分键路径来使用所有现有代码。

我知道我可以使用有序数组作为表视图的数据源,但我想保留现有代码并使用 NSFetchedResultsController 的方法。

为了方便起见,我可以完全控制排序,这将满足我将来的需求,因为我计划构建更复杂的排序顺序(基于位置、顶部记录的使用概率更高等)

然而,这不是一个优雅的解决方案。