NSFetchedResultsController部分本地排序

我怎么能使用NSFetchedResultsController与翻译的排序键和sectionKeyPath?

问题:我在数据库的type中键入typeA,typeB,typeC等属性中的ID,而不是直接因为它应该本地化的值。 在英语中,typeA = Bird,typeB = Cat,typeC =德语中的Dog,它将是Vogel,Katze,Hund。

使用具有排序键的NSFetchedResultController和“类型”上的sectionKeyPath,我收到订单和部分 - typeA - typeB - typeC

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

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

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

所以我正在寻找一种方法来为NSFetchedResultsController进行本地化。

我尝试了瞬态属性方法,但这不适用于排序关键字,因为排序关键字必须位于实体中。

我没有其他想法。 但我不能相信这是不可能的NSFetchedResultsController本地化所需的派生属性?

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

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

感谢您的任何提示。


好吧,不是一个好的解决方案,但最终它的工作(因为我有一个约定的有限记录约100):

初始化应用程序:

  • 我在托管对象中创建了“order by”属性。
  • 我检查自上次以来本地化(以及排序顺序)是否发生了变化。 如果是这样:
  • 我获取所有记录并按照本地化名称排列在NSArray中。
  • 我在商店里写回记录
  • 出于性能原因,我只根据NSPredicate获取并排序记录。

    比我可以使用所有现有的代码使用“排序”作为排序键和节键路径。

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

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

    但这不是一个优雅的解决方案。


    最后,我想在派生属性上需要一个必要的NSSortDescriptor的排序顺序。

    对于排序,一种可能性是做类似的事情:

    [NSSortDescriptor initWithKey:@"type" 
     ascending:YES 
     selector:@selector(translatedCompare:)]
    

    其中translatedCompare是您编写的比较方法(作为NSString的一个类别),它在比较之前对值进行本地化。

    不知道如何处理sectionKeyPath。


    我想这个问题是由缓存引起的。

    当您使用以下方法创建NSFetchedResultsController对象时,可以使用给定名称来设置缓存。 最后一个变量是缓存名称。

    - (id)initWithFetchRequest:(NSFetchRequest *)fetchRequest managedObjectContext:(NSManagedObjectContext *)context sectionNameKeyPath:(NSString *)sectionNameKeyPath cacheName:(NSString *)name
    

    如果存在具有相同名称的缓存,则NSFetchedResultsController使用缓存来计算节和顺序。 缓存写在磁盘上(不是内存)。

    所以如果你改变英文和德文之间的语言,你应该删除缓存。 要删除缓存,可以使用类方法deleteCacheWithName:

    你可以在这里找到详细信息。 http://developer.apple.com/iphone/library/documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40008227-CH1-SW24

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

    上一篇: NSFetchedResultsController sections localized sorted

    下一篇: C# copy file to another directory using other domain/username/password