सवाल है, यहाँ हल किया जाता है है कि कैसे मैं मेरे जैसे noobs के लिए भविष्य में संदर्भ के लिए यह तय मैं व्हाइट-स्पेस को दूर करने की जरूरत: ship.countryOfbuild = [[elements objectAtIndex:0] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSPredicate के साथ वस्तुओं की NSMutableArray के माध्यम से सर्च कर रहे हैं
और मैं करना पड़ा इस तरह विधेय बदलने के लिए: NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"(countryOfBuild contains[cd] %@) OR (shipBuilder contains[cd] %@) OR (name contains[cd] %@) OR (owner contains[cd] %@)",searchText, searchText, searchText, searchText];
मूल प्रश्न
मैं करने के लिए एक खोज पट्टी को जोड़ने के लिए this tutorial उपयोग कर रहा हूँ मेरी परियोजना। मुझे टेबलवर्क सभी काम कर रहा है, लेकिन खोज फ़ंक्शन ऐप को क्रैश कर रहा है। जिस तरह से मैं अब खोज है:
- (void)viewDidLoad
{
[super viewDidLoad];
NSString* pathToFile = [[NSBundle mainBundle] pathForResource:@"ships" ofType: @"csv"];
NSString *file = [[NSString alloc] initWithContentsOfFile:pathToFile encoding: NSUTF8StringEncoding error:NULL];
NSArray *allLines = [file componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
searchContent = [[NSMutableArray alloc] init];
for (NSString* line in allLines) {
NSArray *elements = [line componentsSeparatedByString:@";"];
CargoShips* ship = [[CargoShips alloc]init];
ship.countryOfbuild = [elements objectAtIndex:0];
ship.shipBuilder = [elements objectAtIndex:1];
ship.hullHashtag = [elements objectAtIndex:2];
ship.name = [elements objectAtIndex:3];
ship.owner = [elements objectAtIndex:4];
ship.shipOperator = [elements objectAtIndex:5];
ship.shipDelivery = [elements objectAtIndex:6];
ship.shipFlag = [elements objectAtIndex:7];
ship.shipClass = [elements objectAtIndex:8];
ship.powerPlant = [elements objectAtIndex:9];
ship.HP = [elements objectAtIndex:10];
ship.speed = [elements objectAtIndex:11];
ship.cargoSystem = [elements objectAtIndex:12];
ship.numberOfTanks = [elements objectAtIndex:13];
ship.size = [elements objectAtIndex:14];
[self.searchContent addObject:ship];
}
मैं के सभी 15 टुकड़े के माध्यम से खोज करने के लिए खोज करना चाहते हैं:
-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF contains[cd] %@",
searchText];
searchResults = [searchContent filteredArrayUsingPredicate:resultPredicate];
}
searchContent
एक परिवर्तनशील सरणी इस तरह एक .csv-फ़ाइल से पढ़ने है वस्तु (नाम, आकार, shipclass आदि)
वर्तमान में, इस त्रुटि के साथ दुर्घटनाओं:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't use in/contains operator with collection <CargoShips: 0x714e1b0> (not a collection)'
कार्गोशिप मेरा एनएसओब्जेक्ट क्लास है।
क्रैश किए बिना ऑब्जेक्ट्स के साथ NSMutableArray
के माध्यम से खोजने के लिए मैं NSPredicate को कैसे ठीक करूं?
यहाँ पूर्ण कोड है कि अगर सामान आसान http://pastebin.com/sw12GwHK
यह बहुत अच्छा है, यह अब कम से कम दुर्घटनाग्रस्त नहीं है। लेकिन 1) खोज हमेशा खाली आती है। (लॉग और स्क्रीन पर) और 2) मैं इसे सभी 15 क्षेत्रों में कैसे खोजूं? धन्यवाद :) –
@ ऑस्करएपलैंड, सबसे पहले आपको यह पता लगाना होगा कि यह क्यों काम नहीं करता है। आपको कुछ लॉगिंग करने की ज़रूरत है। लॉग इन self.searchContent यह सुनिश्चित करने के लिए कि इसमें वह है जो आप चाहते हैं। फिर self.searchContent [0] [@ "shipbuilder"] लॉगिंग करने का प्रयास करें, और देखें कि क्या आप जो उम्मीद करते हैं वह लौटाता है। – rdelmar
लॉगिंग सर्च सामग्री मुझे बहुत कुछ '" <कार्गोशिप: 0x758c700> ", " <कार्गोशिप: 0x758c900> ", " <कार्गोशिप: 0x758cb10> ", 'इन तरह की चीजें देता है। 450 के बारे में, मेरे .csv डेटा स्रोत में लाइनों की मात्रा। self.searchContent [0] [@ "shipbuilder"] ऐप को क्रैश करता है '[कार्गोशिप ऑब्जेक्टफॉरकेडस्क्रिप्टस्क्रिप्ट:]: अज्ञात चयनकर्ता उदाहरण 0xb9e9370 2013-01-31 1 9: 27: 57.323 एलएनजी [35488: c07] *** असीमित अपवाद के कारण ऐप को समाप्त करना 'एनएसआईएनवालिडअर्ग्यूमेंट एक्सेप्शन', 'त्रुटि कोड। –