2

我正在尝试从核心数据模型中获取排序的本地化数据。我的代码:

NSEntityDescription *entityDescription = [NSEntityDescription entityForName: entityDescriptionValue
                                                     inManagedObjectContext: context];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity: entityDescription];

[fetchRequest setPredicate: predicate];

NSSortDescriptor *sortBy = [[NSSortDescriptor alloc] initWithKey: @"name" ascending: YES selector: @selector(localizedCompare:)];
[fetchRequest setSortDescriptors: [NSArray arrayWithObject: sortBy]];
[sortBy release];

但是,当我得到对象时,它们仍然按原始值(非本地化数据)排序。

我做错了什么?

4

1 回答 1

1

如何names从 CoreData 实体获得本地化?这并不是localizedCompare:神奇地检索字符串的本地化版本并进行比较。相反,它对相同的字符串使用本地化的排序顺序。@"England"包含, @"France",的数组的排序版本@"Germany"在任何国家/地区都是相同的……它们不包含任何重音字符或其他字符。localizedCompare:只有当两种语言在字母之间使用不同的排序顺序时,结果才会改变。

如果要Localizable.strings根据 CoreData 实体的属性从中检索某些内容,则需要手动进行。CoreData 的 Sqlite 后端不会在获取请求级别处理该问题。因此,您需要首先获取 an 中的条目NSArray,然后需要sortedArrayUsing...:通过传递一个检索本地化名称NSLocalizedString并比较它们的方法来对它们进行排序。

于 2010-02-06T17:14:10.343 回答