2010-01-21 4 views
6

현재 내 구현에서는 UISearchBarController입니다. 입력을 시작하면 UITableView 결과에 이름 속성을 기반으로 관련 개체를 반환하기 위해 대리자 메서드 내에 [NSString compare:]을 사용하고 있습니다.Grapheme 클러스터 내에서 검색 또는 비교

지금까지 영어와 한국어로 잘 작동하지만, 내가 할 수있는 일은 NSString의 문자 클러스터를 검색하는 것입니다. 이것은 한국어가 하나 인 소수의 언어에만 적용됩니다.

영어로 compare:은 입력 한 모든 글자마다 새로운 결과를 반환하지만 한국어로 인식 된 글씨체 클러스터를 완성하면 결과가 생성됩니다. 음절을 구성하는 개별 요소를 통해 내 한국 객체 이름 속성을 검색 할 수 있기를 원합니다.

누구든지이 문제에 접근하는 방법에 대해 알려줄 수 있습니까? 수동으로 UTF16 문자를 검색하거나 하위 수준 클래스를 사용하여 검색하는 것과 관련이 있다고 확신합니다.

건배!

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

결과는 또는 decomposedStringWithCanonicalMapping없이, 항상 NSNotFound입니다 : 여기

은 작동하지 않습니다 구체적인 예이다.

아이디어가 있으십니까?

답변

2

저는 전문가는 아니지만 원하는 솔루션을 찾기가 쉽지 않습니다. 한글 문자의 유니 코드 값과이 유니 코드 값으로 구성되어있는 글자 간에는 아무런 관계가없는 것 같습니다.

"이"는 \ uc774이고 "ㅣ"은 \ u3163입니다. NSString의 관점에서 그들은 서로 특별한 관계가없는 단지 두 개의 다른 문자입니다.

글자와 해당 글자 간의 명시적인 매핑을 찾거나 생성해야하며이 매핑을 참조하는 검색 기능을 직접 작성해야합니다.

This very long page on Unicode Korean이 도움이 될 수 있습니다. 문자에 번호가 매겨진 순서와 그 구성 요소 사이의 구조화 된 관계를 암시하는 모든 문자의 표가 있습니다.

+0

로렌스, 그 정보는 환상적입니다. 한국어로 아이폰 앱이있다. 하지만 나는 한국어가 UTF8/16에 저장되는 방법에 관해 잘못된 가정하에 있다고 생각합니다. 답장을 보내 주셔서 감사합니다. 쿼리에 확실히 반영되었습니다. – Jessedc

+0

당신의 도움에 감사드립니다. 로렌스, 나는 당신의 대답을 받아 들였습니다. 그것은 올바른 방향으로 나아갔습니다. – Jessedc

1

NSLiteralString과 함께 compare:options을 사용하는 경우 문자와 관계없이 문자, 즉 유니 코드 코드 포인트를 비교해야합니다. compare:의 기본 동작은 옵션을 사용하지 않는 것입니다. - decomposedStringWithCanonicalMapping을 사용하여 입력 문자열의 유니 코드 바이트를 가져올 수는 있지만, 그 문자가 compare:과 어떻게 상호 작용하는지 확신 할 수 없습니다.

+0

Don에게 응답 할 시간을내어 주셔서 감사합니다. 너는 오늘 좋은 시간 동안 나를 놀게했다. 나는 무엇을하려고하는지에 대한 구체적인 예를 추가했습니다. – Jessedc

관련 문제