2010-01-06 11 views

Respuesta

78

Gracias por su respuesta, pero hay que solucionar el resultado de un simple "consulta" ignorando mayúsculas y minúsculas. Su sugerencia se aplica para buscar y comparar.

Hablando SQL, necesito un ORDER BY firstName ASC, y este comando no debe distinguir entre mayúsculas y minúsculas para mi uso.

He hecho algunas búsquedas en Google y terminé de leer el NSSortDescriptor Class reference, y pude encontrar la respuesta a mi pregunta. La solución es configurar un selector para el descriptor de clasificación de la siguiente manera:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 

Espero que sea útil para más personas.

+0

No olvides que colon after caseInsensitiveCompare: –

+5

Probé esto con [SQL logging enabled] (http://stackoverflow.com/a/6428693/1402846). Resulta que iOS es lo suficientemente inteligente como para hacer la ordenación en SQL en lugar de en la memoria, al poner 'COLLATE NSCollateNoCase', o' COLLATE NSCollateLocaleSensitiveNoCase' para 'localizedCaseInsensitiveCompare:', después de 'ORDER BY'. Probado en simulador con iOS 6 y dispositivo con iOS 7. – Pang

+1

Para aquellos de ustedes que buscan una solución> xCode 7 y Swift: '[NSSortDescriptor (clave:" cadena ", ascendente: verdadero, selector: #selector (NSString.caseInsensitiveCompare (_ :)))] ' – glenstorey

5

Mira la NSPredicate programming guide, pero básicamente utilice [c] para ignorar caso:

@"firstName BEGINSWITH[c] $FIRST_NAME" 
+0

Hey Ben, gracias! Pude encontrar la respuesta a mi pregunta. Lo publiqué aquí. Saludos, VFN – vfn

10

Si la aplicación está traducida a varios idiomas, considere utilizar el selector localizedCaseInsensitiveCompare: en lugar de caseInsensitiveCompare. Tendrá el efecto de evitar que la letra 'é' esté después de la letra 'e'.

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; 
4

Swift Versión:

let sortDescriptor = NSSortDescriptor(key: "firstName", ascending: true, selector: #selector(NSString.localizedCaseInsensitiveCompare)) 
Cuestiones relacionadas