Domanda

Sto cercando di ottenere i dati localizzati ordinati da un modello di dati di base. Il mio codice:

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];

Ma, quando ricevo gli oggetti, essi vengono ancora ordinato con i valori originali (dati non localizzato).

Che cosa sto facendo, non giusto?

È stato utile?

Soluzione

Come si ottiene il names localizzato dall'entità CoreData? Non è che localizedCompare: recupera magicamente la versione localizzata di stringhe e confrontarli. Invece, utilizza i ordinamento localizzati per le stesse stringhe. La versione ordinata di una matrice contenente @"England", @"France", @"Germany" sarebbe lo stesso in qualsiasi paese ... che non contengono caratteri accentati o qualsiasi altra cosa. Il risultato di localizedCompare: può cambiare solo quando due lingue utilizzano sistema di classificazione diverso tra le lettere.

Se si desidera recuperare qualcosa dal Localizable.strings in base alla proprietà delle entità CoreData, è necessario farlo manualmente. backend SQLite di CoreData non gestirà che a livello di recupero richieste. Quindi è necessario prendere prima le voci in un NSArray, e quindi hanno bisogno di ordinarli utilizzando sortedArrayUsing...: passando un metodo che recupera i nomi localizzati da NSLocalizedString e li confronta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top