Pregunta

Voy a decirles desde ahora soy un programador de cacao sin experiencia, y me disculpo si mi pregunta es contestada en la documentación de alguna manera y que simplemente se lo perdieron, o había algo que no entiendo de cómo funciona el NSPredicateEditor. Sin embargo, lo hice intento de buscar en la documentación y en Google, con poco efecto. Por lo tanto, les traigo la pregunta.

Estoy intentando filtrar una vista de tabla basada en datos básicos con un NSPredicateEditor. El filtrado funciona bien, en términos de las filas filtrado basado en diversos criterios, a través de la creación de un NSCompoundPredicate. Sin embargo, cuando una fila en el Editor de predicados no tiene ningún texto en su campo de búsqueda, el NSPredicate que se devuelve es algo a lo largo de las líneas

dataName CONTAINS[cd] ""

... que coincide con ninguno de los registros de la base de datos - no es lo que quiero. Si ese campo de búsqueda en esa fila está en blanco, esencialmente, no quiero que se filtre mi conjunto de datos en absoluto.

Mi pregunta entonces es, ¿cuál es la mejor solución más fácil / ignorar estas partes del predicado? Mi idea inicial era analizar el valor NSPredicateEditor fila por fila con (NSPredicate *)predicateForRow:(NSInteger)row y reconstruir el predicado mismo, haciendo caso omiso de líneas que están tratando de igualar "", pero que parece innecesariamente complicado. Tomando la final NSCompoundPredicate de separación, con - (NSArray *)subpredicates y edición de esa manera también parece que tal vez me estoy tomando el puño de amura mal. ¿Hay una manera más elegante de hacer esto?

* Para que quede claro, yo estoy pensando en la edición de la copia del predicado que luego me pase al controlador para mi vista de tabla, en realidad no editar el predicado inicial que se almacena actualmente en el NSPredicateEditor.

¿Fue útil?

Solución

Parece que debería ser capaz de subclase NSPredicateEditor y anular predicateForRow: (declarada en la superclase de NSPredicateEditor, NSRuleEditor) y hacer su sustitución allí. Es, básicamente, acaba de llamar la implementación del súper, a continuación, examinar el predicado y devuelve un recién creado uno si es necesario.

Otros consejos

Brian tiene la idea correcta, creo, pero NSPredicateEditor bajo Snow Leopard no pone en -predicateForRow: para generar sus predicados. Tendrá que sustituir el método de nivel superior -predicate pero todavía es bastante simple para examinar la estructura del predicado y podar las comparaciones contra un nil o constantValue cadena vacía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top