2010-01-21 15 views
6

En mi aplicación actual de un UISearchBarController estoy usando [NSString compare:] dentro del método filterContentForSearchText:scope: delegado a devolver los objetos relevantes en función de su propiedad de nombre a los resultados UITableView empieza a escribir.o comparar dentro de un clúster grafema en coreano

Hasta ahora, esto funciona muy bien en inglés y coreano, pero lo que me gustaría poder hacer es buscar dentro de los clústeres de caracteres definidos de NSString. Esto solo es aplicable a un puñado de idiomas, de los cuales el coreano es uno.

En inglés, compare: devuelve resultados nuevos después de cada letra que ingrese, pero en coreano los resultados se generan una vez que completa un clúster de grafemas reconocido. Me gustaría poder buscar a través de mi propiedad de nombre de objetos coreanos a través de los elementos individuales que forman una sílaba.

¿Alguien puede arrojar alguna luz sobre cómo acercarse a esto? Estoy seguro de que tiene algo que ver con buscar caracteres UTF16 manualmente o utilizando una clase de nivel inferior.

¡Salud!

Aquí está un ejemplo específico que simplemente no está funcionando:

`NSString *string1 = @"이"; 
`NSString *string2 = @"ㅣ"; 
NSRange resultRange = [[string1 decomposedStringWithCanonicalMapping] rangeOfString: [string2 decomposedStringWithCanonicalMapping] options:(NSLiteralSearch)]; 

El resultado es siempre NSNotFound, con o sin decomposedStringWithCanonicalMapping.

¿Alguna idea?

Respuesta

2

No soy un experto, pero creo que es muy poco probable que encuentre una solución limpia para lo que desea. No parece haber ninguna relación entre el valor Unicode de un personaje coreano y los grafemas de los que está compuesto.

p. Ej. "이" es \ uc774 y "ㅣ" es \ u3163. Desde la perspectiva de NSString, son solo dos personajes diferentes sin relación específica entre ellos.

Sospecho que tendrá que encontrar o crear una asignación explícita entre los caracteres y sus grafemas, y luego escribir su propia función de búsqueda que consulte este mapeo.

This very long page on Unicode Korean puede ayudarlo, si se trata de eso. Tiene una tabla de todos los caracteres que sugiere una relación estructurada entre la forma en que se numeran los personajes y sus componentes.

+0

Lawrence, esa información es fantástica. Hay aplicaciones de iPhone en coreano que parecen hacer lo que he estado intentando; pero supongo que estaba bajo la suposición errónea de cómo se almacena el coreano en UTF8/16. Gracias por su respuesta, definitivamente ha arrojado algo de luz sobre mi consulta. – Jessedc

+0

Gracias por su ayuda Lawrence, he aceptado su respuesta; fue un gran paso en la dirección correcta. – Jessedc

1

Si usa compare:options con NSLiteralString, debe comparar carácter por carácter, es decir, los puntos de código Unicode, independientemente del grafema. El comportamiento predeterminado de compare: es no utilizar ninguna opción. Puede usar - decomposedStringWithCanonicalMapping para obtener los bytes Unicode de la cadena de entrada, pero no estoy seguro de cómo podría interactuar con compare:.

+0

Gracias por tomarse el tiempo para responder Don. Me hiciste jugar durante una buena hora hoy. He agregado un ejemplo específico a la pregunta de qué estoy tratando de hacer. – Jessedc

Cuestiones relacionadas