2012-04-10 39 views
7

मुझे दो तारों, केस-असंवेदनशील, डायक्रिटिक असंवेदनशील, और व्हाइटस्पेस-असंवेदनशील से मेल खाने के लिए एनएसपी्रेडिकेट का उपयोग करने की आवश्यकता है।एनएसपीडिकेट जो व्हाइटस्पेस को अनदेखा करता है

विधेय कुछ इस तरह दिखेगा:

[NSPredicate predicateWithFormat:@"Key ==[cdw] %@", userInputKey]; 

'w' संशोधक का आविष्कार एक व्यक्त करने के लिए मैं उपयोग करना चाहते हैं क्या है।

मैं केवल userInputKey को ट्रिम नहीं कर सकता क्योंकि डेटा-स्रोत "कुंजी" मानों में उनमें सफेद जगह भी हो सकती हैं (उन्हें उन सफेद जगहों की आवश्यकता होती है, मैं उन्हें पहले ही ट्रिम नहीं कर सकता)।

उदाहरण के लिए, userInputKey "abc" दिया गया भविष्यवाणी

{"abc", "a b c", " a B C "}
और अन्य सभी से मेल खाना चाहिए। userInputKey "ए बी सी" को देखते हुए भविष्यवाणी उपरोक्त सेट में सभी मानों से मेल खाती है।

ऐसा करना इतना मुश्किल नहीं हो सकता है, है ना?

उत्तर

11

कुछ इस तरह परिभाषित करने के बारे में कैसे: इस तरह इसका इस्तेमाल

+ (NSPredicate *)myPredicateWithKey:(NSString *)userInputKey { 
    return [NSPredicate predicateWithBlock:^BOOL(NSString *evaluatedString, NSDictionary *bindings) { 
     // remove all whitespace from both strings 
     NSString *strippedString=[[evaluatedString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""]; 
     NSString *strippedKey=[[userInputKey componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""]; 
     return [strippedString caseInsensitiveCompare:strippedKey]==NSOrderedSame; 
    }]; 
} 

तब:

NSArray *testArray=[NSArray arrayWithObjects:@"abc", @"a bc", @"A B C", @"AB", @"a B d", @"A  bC", nil]; 
NSArray *filteredArray=[testArray filteredArrayUsingPredicate:[MyClass myPredicateWithKey:@"a B C"]];    
NSLog(@"filteredArray: %@", filteredArray); 

परिणाम है: // stackoverflow:

2012-04-10 13:32:11.978 Untitled 2[49613:707] filteredArray: (
    abc, 
    "a bc", 
    "A B C", 
    "A  bC" 
) 
+0

मैं देखने के लिए http था .com/प्रश्न/3543208/nsfetchrequest-and-predicatewithblock क्योंकि मैं NSFetchRequest के साथ भविष्यवाणी का उपयोग करना चाहता था, लेकिन इसके अलावा, आपके समाधान एन खूबसूरती से काम किया। धन्यवाद! – JiaYow

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