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):
初始化应用程序:
出于性能原因,我只根据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