iPhone Fetch richiesta con l'ordinamento localizzata
-
18-09-2019 - |
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?
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.