Domanda

Lo dirò a destra fuori Sono un programmatore di cacao inesperto, e mi scuso se la mia domanda si risponde nella documentazione in qualche modo e ho solo perso, o c'era qualcosa che non capisco nel modo in cui funziona il NSPredicateEditor. Tuttavia, ho fatto il tentativo di cercare nella documentazione e su Google, a poco effetto. Così, io porto la domanda a voi.

Sto tentando di filtrare una vista basato su tabelle di dati principale con una NSPredicateEditor. Il filtraggio funziona bene, in termini di righe filtraggio in base a vari criteri, attraverso la creazione di un NSCompoundPredicate. Tuttavia, quando una riga nell'editor predicato non ha alcun testo nel suo campo di ricerca, il NSPredicate che viene restituito è qualcosa sulla falsariga di

dataName CONTAINS[cd] ""

... che corrisponde nessuno dei record Core Data - non quello che voglio. Se questo campo di ricerca in quella riga è vuota, in sostanza, non voglio che per filtrare mio set di dati a tutti.

La mia domanda è allora, qual è la soluzione più semplice / meglio per ignorare queste parti del predicato? La mia idea iniziale era quella di analizzare il valore NSPredicateEditor riga per riga con (NSPredicate *)predicateForRow:(NSInteger)row e ricostruire il predicato me stesso, ignorando le linee che stanno cercando di abbinare "", ma che sembra inutilmente ingombrante. Prendendo la finale NSCompoundPredicate parte con - (NSArray *)subpredicates e la modifica in questo modo sembra anche, forse sto prendendo la virata sbagliata. C'è un modo più elegante per fare questo?

* Per essere chiari, io sto pensando di modificare la copia del predicato che ho poi passare al controllore per la mia vista tabella, in realtà non modifica il predicato iniziale che viene attualmente memorizzato nella NSPredicateEditor.

È stato utile?

Soluzione

Sembra che si dovrebbe essere in grado di sottoclasse NSPredicateEditor e sovrascrivere predicateForRow: (dichiarata nel superclasse di NSPredicateEditor, NSRuleEditor) e fare la tua sostituzione lì. Si sarebbe fondamentalmente solo chiamato implementazione di super, quindi esaminare il predicato e tornare uno appena creato, se necessario.

Altri suggerimenti

Brian ha l'idea giusta, credo, ma NSPredicateEditor sotto Snow Leopard non mette in -predicateForRow: per generare il suo predicati. Avrai bisogno di eseguire l'override del metodo di livello superiore -predicate ma è ancora abbastanza semplice per esaminare la struttura predicato e potare fuori qualsiasi confronto contro una nil o constantValue stringa vuota.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top