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

namesCoreDataエンティティからローカライズを取得するにはどうすればよいですか?localizedCompare:ローカライズされたバージョンの文字列を魔法のように取得して比較するわけではありません。代わりに、同じ文字列に対してローカライズされた並べ替え順序を使用します。@"England"、、を含む配列のソートされたバージョンは、@"France"どの@"Germany"国でも同じです...アクセント付きの文字などは含まれていません。の結果はlocalizedCompare:、2つの言語が文字間で異なるソート順を使用する場合にのみ変更できます。

Localizable.stringsCoreDataエンティティのプロパティに基づいて何かを取得する場合は、手動で行う必要があります。CoreDataのSqliteバックエンドは、フェッチリクエストのレベルではそれを処理しません。したがって、最初にのエントリをフェッチしてから、ローカライズされた名前を取得して比較するメソッドを渡すことにより、をNSArray使用してエントリを並べ替える必要があります。sortedArrayUsing...:NSLocalizedString

于 2010-02-06T17:14:10.343 に答える