Sto implementando un campo di ricerca in cui l'utente può digitare una stringa per filtrare gli elementi visualizzati in una vista. Ogni oggetto che viene visualizzato ha una relazione to-many keywords
e vorrei poter filtrare gli oggetti in base alle loro parole chiave. Ogni oggetto ha una proprietà parola chiave name
, così ho istituito un NSPredicate per fare il filtraggio che assomiglia a questo:Corrispondenza senza distinzione tra maiuscole e minuscole NSPredicate su più rapporti
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS %@", self.searchString];
Questo funziona, ma il problema è che la ricerca è case-sensitive, quindi se il la parola chiave ha una lettera maiuscola ma l'utente digita tutto in minuscolo, non vengono trovate corrispondenze. Ho provato la seguente modifica:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS[c] %@", self.searchString];
Ma ciò non fa alcuna differenza nella sensibilità del caso della corrispondenza. C'è un modo per fare questo abbinamento insensibile alle maiuscole utilizzando solo un semplice predicato? O avrò bisogno di implementare una sorta di accesso personalizzato sulla classe di parole chiave, ad es. scrivere un metodo lowercaseName
e confrontarlo con una versione in minuscolo della stringa di ricerca?
Addendum: Dopo ulteriori esplorazioni, la soluzione di aggiungere una funzione di accesso personalizzato funziona bene per uso manuale di NSPredicate, ma non funziona affatto quando si utilizza NSFetchRequest con Core Data, che funziona solo se l'interrogazione di attributi definiti nei dati Nucleo modello.
Sapevo che doveva esserci un modo che mi mancava. Funziona come un fascino. Grazie! –