La domanda è risolto, ecco come ho risolto in futuro per niubbi come me avevo bisogno di rimuovere i bianchi-spazi: ship.countryOfbuild = [[elements objectAtIndex:0] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
La ricerca attraverso NSMutableArray di oggetti con NSPredicate
e ho dovuto cambiare il predicato in questo modo: NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"(countryOfBuild contains[cd] %@) OR (shipBuilder contains[cd] %@) OR (name contains[cd] %@) OR (owner contains[cd] %@)",searchText, searchText, searchText, searchText];
domanda originale
sto usando this tutorial per aggiungere una barra di ricerca al mio progetto. Ho visto la vista tabella funzionante, ma la funzione di ricerca sta bloccando l'app. Il mio modo di ricerca è:
-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF contains[cd] %@",
searchText];
searchResults = [searchContent filteredArrayUsingPredicate:resultPredicate];
}
Il searchContent
è un array mutabile leggere da un .csv file in questo modo:
- (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];
}
vorrei che la ricerca per cercare attraverso tutti i 15 pezzi del oggetto (nome, dimensione, shipclass ecc)
Attualmente, questo si blocca con l'errore:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't use in/contains operator with collection <CargoShips: 0x714e1b0> (not a collection)'
CargoShips è la mia classe NSObject.
Come si corregge NSPredicate per cercare in uno NSMutableArray
oggetti senza arresto anomalo?
Ecco il codice completo se questo fa roba facile http://pastebin.com/sw12GwHK
Questo è fantastico, non si blocca più atleast. Ma 1) La ricerca ritorna sempre vuota. (Nel registro e sullo schermo) e 2) Come faccio a cercare tutti i 15 campi? Grazie :) –
@OscarApeland, per prima cosa devi scoprire perché questo non funziona. Devi fare un po 'di registrazione. Accedi a self.searchContent per assicurarti che contenga ciò che desideri. Quindi prova a registrare self.searchContent [0] [@ "shipBuilder"], e vedi se ciò restituisce ciò che ti aspetti. – rdelmar
La registrazione di searchContent mi dà un sacco di '" ", " ", " "," cose come queste. Circa 450, la quantità di righe nella mia origine dati .csv. self.searchContent [0] [@ "shipBuilder"] Arresta l'applicazione con un '[CargoShips objectForKeyedSubscript:]: selettore non riconosciuto inviato all'istanza 0xb9e9370 2013-01-31 19: 27: 57.323 LNG [35488: c07] *** Terminazione dell'app a causa dell'eccezione non rilevata 'NSInvalidArgumentException', 'Codice errore. –