2012-03-04 15 views
9

मैं UISearchBar, UITableView, एक वेब सेवा है जो एक NSMutableArray है कि इस तरह की वस्तुओं को शामिल रिटर्न है:फ़िल्टर एक NSArray जो कस्टम शामिल वस्तुओं

//Food.h 
Food : NSObject { 
    NSString *foodName; 
    int idFood; 
} 

@property (nonatomic, strong) NSString *foodName; 

और सरणी:

Food *food1 = [Food alloc]initWithName:@"samsar" andId:@"1"]; 
Food *food2 = [Food alloc] initWithName:@"rusaramar" andId:@"2"]; 

NSSarray *array = [NSArray arrayWithObjects:food1, food2, nil]; 

मैं कैसे करूँ "सर" से शुरू होने वाले नाम वाले ऑब्जेक्ट्स के साथ मेरी सरणी फ़िल्टर करें?

उत्तर

24

आप किसी सरणी को फिल्टर की तरह आप निम्न कोड के साथ करना चाहते हैं कर सकते हैं:

NSMutableArray *array = ...; 

[array filterUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { 
    return [evaluatedObject.foodName hasPrefix:searchBar.text]; 
}]; 

यह सरणी "यथा-स्थान" को फ़िल्टर और एक NSMutableArray पर ही उपलब्ध है जाएगा। यदि आप एक नई सरणी प्राप्त करना चाहते हैं जिसे आपके लिए फ़िल्टर किया गया है, तो filteredArrayUsingPredicate:NSArray विधि का उपयोग करें।

+0

आपके उत्तर के लिए धन्यवाद, [evalutedObject objectName] क्या है ?? – samir

+0

'ऑब्जेक्टनाम' आपके प्रश्न में 'NSObject' subclass पर संपत्ति थी। यदि आप अपनी सरणी में ऑब्जेक्ट्स की किसी भिन्न प्रॉपर्टी के आधार पर फ़िल्टर करना चाहते हैं, तो इसके बजाय केवल संपत्ति के नाम से उपयोग करें। –

+0

मुझे खेद है, मैं ऐसा कर रहा हूं: myObject * obj = [myObject new]; myArray = [myArray filteredArrayUsingPredicate: [NSPredicate predicateWithBlock:^BOOL (id मूल्यांकन किया गया ऑब्जेक्ट, NSDictionary * बाइंडिंग) { वापसी [[obj objectName] hasPrefix: searchTextField.text]; }]]; – samir

0
NSString *predString = [NSString stringWithFormat:@"(foodName BEGINSWITH[cd] '%@')", @"sa"]; 

NSPredicate *pred = [NSPredicate predicateWithFormat:predString]; 

NSArray *array = [arr filteredArrayUsingPredicate:pred]; 
NSLog(@"%@", array); 
संबंधित मुद्दे