2010-01-21 9 views
6

एक UISearchBarController की मेरी वर्तमान कार्यान्वयन में मैं [NSString compare:] उपयोग कर रहा हूँ filterContentForSearchText:scope: प्रतिनिधि विधि के अंदर परिणाम UITableView के लिए उनके नाम संपत्ति के आधार पर संबंधित वस्तुओं वापस जाने के लिए के रूप में आप लिखना शुरू में एक ग्राफ़ीम क्लस्टर के भीतर की तुलना करें।खोजें या कोरियाई

अब तक यह अंग्रेजी और कोरियाई में बहुत अच्छा काम करता है, लेकिन मैं जो करने में सक्षम होना चाहता हूं वह NSString के परिभाषित चरित्र क्लस्टर के भीतर खोज है। यह केवल कुछ भाषाओं के लिए लागू है, जिनमें से कोरियाई एक है।

अंग्रेजी में, compare: आपके द्वारा दर्ज किए गए प्रत्येक पत्र के बाद नए परिणाम लौटाता है, लेकिन कोरियाई में परिणाम एक मान्यता प्राप्त ग्रैफेम क्लस्टर पूरा करने के बाद उत्पन्न होते हैं। मैं अपने कोरियाई ऑब्जेक्ट्स नाम संपत्ति के माध्यम से अलग-अलग तत्वों के माध्यम से खोज करने में सक्षम होना चाहता हूं जो एक अक्षर बनाते हैं।

क्या कोई इस बात से कैसे कोई प्रकाश डाल सकता है? मुझे यकीन है कि यूटीएफ 16 अक्षरों के माध्यम से मैन्युअल रूप से, या निचले स्तर की कक्षा का उपयोग करके इसे करने के लिए कुछ करना है।

चीयर्स!

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

परिणाम हमेशा NSNotFound है, के साथ या बिना decomposedStringWithCanonicalMapping:

यहाँ एक विशिष्ट उदाहरण है कि अभी काम नहीं कर रहा है।

कोई विचार?

उत्तर

2

मैं कोई विशेषज्ञ नहीं हूं, लेकिन मुझे लगता है कि आप जो चाहते हैं उसके लिए एक साफ समाधान खोजने की संभावना बहुत कम है। कोरियाई चरित्र के यूनिकोड मूल्य और उसके द्वारा बनाए गए ग्रैफेम्स के बीच कोई संबंध नहीं प्रतीत होता है।

उदा। "이" \ uc774 और "ㅣ" है \ u3163 है। एनएसएसटींग के परिप्रेक्ष्य से, वे केवल दो अलग-अलग वर्ण हैं जिनके साथ एक दूसरे से कोई विशिष्ट संबंध नहीं है।

मुझे लगता है कि आप को खोजने के लिए या पात्रों और उनके graphemes के बीच एक स्पष्ट मानचित्रण बनाते हैं और फिर अपनी स्वयं की खोज समारोह है कि इस मानचित्रण सलाह भी लेता है लिखना होगा।

This very long page on Unicode Korean आपकी मदद कर सकता है, अगर इसकी बात आती है। यह जो रास्ता पात्रों गिने जा रहे हैं और उनके घटकों के बीच कुछ संरचित संबंध पता चलता है सभी पात्रों की एक टेबल है।

+0

लॉरेंस, वह जानकारी शानदार है। कोरियाई में आईफोन एप्स हैं जो ऐसा करने लगते हैं जो मैं कोशिश कर रहा हूं; लेकिन मुझे लगता है कि मैं गलत धारणा के तहत था कि यूटीएफ 8/16 में कोरियाई कैसे संग्रहीत किया जाता है। आपके उत्तर के लिए धन्यवाद, यह निश्चित रूप से मेरी क्वेरी पर कुछ प्रकाश डाला है। – Jessedc

+0

आपकी मदद के लिए धन्यवाद लॉरेंस, मैंने आपका जवाब स्वीकार कर लिया है; यह सही दिशा में एक महान कदम था। – Jessedc

1

यदि आप NSLiteralString के साथ compare:options का उपयोग करते हैं, तो इसे ग्राफ़ीम के बावजूद, चरित्र द्वारा चरित्र की तुलना करना चाहिए, यानी यूनिकोड कोड बिंदु। compare: का डिफ़ॉल्ट व्यवहार कोई विकल्प नहीं है। आप - decomposedStringWithCanonicalMapping का उपयोग इनपुट स्ट्रिंग के यूनिकोड बाइट्स प्राप्त करने के लिए सकता है, लेकिन मुझे यकीन है कि कैसे है कि compare: के साथ बातचीत नहीं कर रहा हूँ।

+0

डॉन का जवाब देने के लिए समय निकालने के लिए धन्यवाद। आपने मुझे आज एक अच्छे घंटे के लिए खेलना शुरू कर दिया। मैं क्या मैं क्या करने की कोशिश कर रहा हूँ के सवाल पर एक विशिष्ट उदाहरण जोड़ लिया है। – Jessedc

संबंधित मुद्दे