2010-01-21 25 views
6

Trong khi thực hiện UISearchBarController, tôi đang sử dụng [NSString compare:] bên trong phương thức ủy nhiệm filterContentForSearchText:scope: để trả về các đối tượng liên quan dựa trên thuộc tính tên của chúng cho kết quả UITableView khi bạn bắt đầu nhập.Tìm kiếm hoặc so sánh trong một Cụm Grapheme bằng tiếng Hàn

Cho đến nay công trình này rất tuyệt vời bằng tiếng Anh và tiếng Hàn, nhưng điều tôi muốn làm là tìm kiếm trong các cụm ký tự được xác định của NSString. Điều này chỉ áp dụng cho một ngôn ngữ hữu ích, trong đó tiếng Hàn là một ngôn ngữ.

Bằng tiếng Anh, compare: trả về kết quả mới sau mỗi chữ cái bạn nhập, nhưng bằng tiếng Hàn, kết quả được tạo khi bạn hoàn thành cụm grapheme được nhận dạng. Tôi muốn có thể tìm kiếm thông qua tài sản tên đối tượng Hàn Quốc của tôi thông qua các yếu tố cá nhân tạo thành một âm tiết.

Có ai có thể làm sáng tỏ cách tiếp cận này không? Tôi chắc chắn rằng nó có một cái gì đó để làm với tìm kiếm thông qua các ký tự UTF16 bằng tay, hoặc bằng cách sử dụng một lớp cấp thấp hơn.

Chúc mừng!

Dưới đây là một ví dụ cụ thể mà chỉ là không làm việc:

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

Kết quả luôn luôn là NSNotFound, có hoặc không có decomposedStringWithCanonicalMapping.

Bất kỳ ý tưởng nào?

Trả lời

2

Tôi không có chuyên gia, nhưng tôi nghĩ bạn rất khó tìm được giải pháp sạch cho những gì bạn muốn. Có vẻ như không có bất kỳ mối quan hệ nào giữa giá trị Unicode của ký tự tiếng Hàn và các đồ thị mà nó tạo thành.

ví dụ: "이" là \ uc774 và "ㅣ" là \ u3163. Từ quan điểm của NSString, chúng chỉ là hai nhân vật khác nhau không có mối quan hệ cụ thể với nhau.

Tôi nghi ngờ rằng bạn sẽ phải tìm hoặc tạo một ánh xạ rõ ràng giữa các ký tự và đồ thị của chúng, sau đó viết chức năng tìm kiếm của riêng bạn để tham khảo bản đồ này.

This very long page on Unicode Korean có thể giúp bạn, nếu nói đến điều đó. Nó có một bảng của tất cả các ký tự cho thấy một số mối quan hệ có cấu trúc giữa cách các ký tự được đánh số và các thành phần của chúng.

+0

Lawrence, thông tin đó thật tuyệt vời. Có những ứng dụng iPhone ở Hàn Quốc dường như làm những gì tôi đã cố gắng; nhưng tôi đoán tôi đã bị sai giả định về cách Hàn Quốc được lưu trữ trong UTF8/16. Cảm ơn câu trả lời của bạn, chắc chắn nó đã làm sáng tỏ một số câu hỏi của tôi. – Jessedc

+0

Cảm ơn sự giúp đỡ của bạn Lawrence, tôi đã chấp nhận câu trả lời của bạn; đó là một bước tiến lớn đúng hướng. – Jessedc

1

Nếu bạn sử dụng compare:options với NSLiteralString, nó phải so sánh ký tự theo ký tự, tức là, các điểm mã Unicode, bất kể grapheme là gì. Hành vi mặc định của compare: là không sử dụng tùy chọn nào. Bạn có thể sử dụng - decomposedStringWithCanonicalMapping để nhận các byte Unicode của chuỗi đầu vào, nhưng tôi không chắc chắn cách thức đó sẽ tương tác với compare:.

+0

Cảm ơn bạn đã dành thời gian trả lời Don. Bạn đã làm cho tôi chơi xung quanh cho một giờ tốt ngày hôm nay. Tôi đã thêm một ví dụ cụ thể cho câu hỏi về những gì tôi đang cố gắng làm. – Jessedc

Các vấn đề liên quan