2010-06-03 19 views
34

मेरे पास विधि के साथ लौटाए गए कैल्वेंट्स का NSArray है। वापस आने वाली घटनाओं से, मैं केवल उन लोगों को रखने की कोशिश कर रहा हूं जिनमें ईवेंट का शीर्षक == @"on call" (केस-असंवेदनशील) है।यह निर्धारित करने के लिए एनएसपीडिकेट का उपयोग करना कि कोई स्ट्रिंग किसी अन्य स्ट्रिंग के बराबर है

मैं सरणी में उन घटनाओं जिसका शीर्षक निम्नलिखित कोड (जहाँ 'घटनाओं' एक 'NSArray' CalEvents साथ आबादी है) के साथ@"on call" शामिल रखने के लिए कर रहा हूँ:

NSPredicate *onCallPredicate = [NSPredicate predicateWithFormat:@"(SELF.title CONTAINS[c] 'on call')"]; 
[events filteredArrayUsingPredicate:onCallPredicate]; 

मैं कोशिश की है एक अनुमानित प्रारूप स्ट्रिंग का उपयोग करके:

@"SELF.title == 'on call'" लेकिन यह काम नहीं प्रतीत होता है।

क्या ऐसा करने का कोई आसान तरीका है?

उत्तर

99

[NSPredicate predicateWithFormat:@"title ==[c] 'on call'"];

([c] समानता तुलना केस-संवेदी बना देता है।) का प्रयास प्रारूप @"self.title like[c] 'on call'" साथ

+11

+1, हालांकि आप इसे 'असंवेदनशील' बनाने के लिए '[c] 'संशोधक को' == 'फेंक सकते हैं। –

+1

इसे केस-असंवेदनशील होने के लिए संपादित किया गया। –

+0

बस उत्सुक, MATCH [n] == के लिए काम करेगा जब किसी भी (* ?.) वाइल्डकार्ड के बिना उपयोग किया जाता है? – Samuel

10

कोशिश विधेय। निम्नलिखित नमूना कोड 2 स्ट्रिंग आउटपुट करता है:

NSArray* ar = [NSArray arrayWithObjects:@"on call", @"I'm on call", @"lala", @"On call", nil]; 
NSArray* filt = [ar filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self like[c] 'on call'"]]; 
NSLog([filt description]); 

//Output 
"on call", 
"On call" 
+3

स्ट्रिंग तुलना के लिए '==' और' like' का उपयोग करने के बीच कोई अंतर है? – Garry

+0

आपके मामले में ऐसा लगता है कि वे वही काम करते हैं। लेकिन यदि आप स्ट्रिंग तुलना में वाइल्डकार्ड का उपयोग करना चाहते हैं तो '==' काम नहीं करेगा और आपको इसके बजाय LIKE का उपयोग करने की आवश्यकता होगी। – Vladimir

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

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